Establecer el color de la línea de estado de tmux según el nombre de host
10
Me gustaría tmuxelegir un color dinámicamente en función del nombre de host de la máquina. Dado que comparto mi tmux.confen varias máquinas, asignar un color único para cada uno de esos hosts sería útil visualmente, especialmente cuando se trabaja en más de uno de los equipos simultáneamente. ¿Es esto factible?
Yo también quería esta característica. Básicamente fusioné todo en este .tmux.conf
# cat <<__DATA__ >/dev/null
# Embed shell scripts
set -g status-utf8 on
set -g utf8 on
set -g default-terminal "screen-256color"
run "cut -c3- ~/.tmux.conf | bash -s apply_configuration"
# __DATA__
#
# apply_configuration() {
# tmux set -g status-bg colour$(hash_string256 $(hostname))
# }
# hash_string256() {
# hash_value=$(printf "%s" "$1" | md5sum | sed -e 's/[^[:alnum:]]\+//g' | tr "a-f" "A-F")
# if [ "x" != "x$2" ]
# then
# v2="+ $2"
# fi
# echo "$(((0x$hash_value $v2) % 255))" | tr -d "-"
# }
#
# $1
Eliminé el uso bcporque no lo tenía en mi git-bash. Por lo tanto, quería que funcionara tanto en mis sistemas Linux como en Windows con Cygwin sin agregar cosas adicionales.
Me temo que esta podría ser una pregunta tonta, pero ¿cómo la uso exactamente? Lo copié / pegué, pero después de volver a cargar mi .tmux.confobtuve "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. ¡Sin embargo, mi barra de estado se volvió roja!
3
Se me ocurrió la siguiente función de shell:
hash_string256() {
# Hash $1 into a number
hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
# Add the hash with $2 and modulo 256 the result
# if $2 == "" it is 0
printf "ibase=16; (%s + %X) %% 100\n" $hash_value "$2" | bc
}
Esta función se puede usar así (los resultados son verdaderos si $HOSTes así LOL):
Para el nombre de host LOL, establecería el status-fgto colour113y status-bgto colour240. El número 127 $(hash_string256 $HOST 127)está allí, por lo que el fondo no será el mismo que el color de primer plano y estará muy separado el uno del otro.
Si alguien sabe una manera de usar la función dentro de la tmux.conf, lo agradecería.
Raphael Ahrens
1
Mi configuración de tmux incluye una forma de definir y ejecutar funciones de shell arbitrarias autocontenidas dentro del archivo tmux conf.
Caleb
@Caleb interesante. Actualmente no tengo tiempo para editarlo en la respuesta. Pero lo agregaré.
Raphael Ahrens
1
Es posible que desee que sea un final alternativo para la respuesta en lugar de ingresarla como la respuesta principal porque es probable que confunda a cualquiera que no tenga algún foo avanzado en su haber. La solución es un truco que involucra documentos aquí y obtener un archivo de configuración y un script ejecutable del mismo archivo, por lo que implementar esto requiere un cambio en todo el archivo de configuración, no solo agregar un par de líneas. Hacerlo bien no será para todos, así que deles una forma de editar su configuración regular usando scripts externos antes de sugerir que se puedan combinar.
.tmux.conf
obtuve"cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1
. ¡Sin embargo, mi barra de estado se volvió roja!Se me ocurrió la siguiente función de shell:
Esta función se puede usar así (los resultados son verdaderos si
$HOST
es asíLOL
):Para conectarlo
tmux
puede usar un script que se inicia y configuratmux
.Para el nombre de host
LOL
, establecería elstatus-fg
tocolour113
ystatus-bg
tocolour240
. El número 127$(hash_string256 $HOST 127)
está allí, por lo que el fondo no será el mismo que el color de primer plano y estará muy separado el uno del otro.Para ninguno de los sistemas GNU
Si su sistema tiene en
md5
lugar demd5sum
la líneapuede ser reemplazado con
fuente
tmux.conf
, lo agradecería.