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?

Sridhar Ratnakumar
fuente

Respuestas:

3

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.

DrMilk
fuente
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):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Para conectarlo tmuxpuede usar un script que se inicia y configura tmux.

#!/bin/sh
SESSION=$USER

hash_string256() {
    hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
    printf "ibase=16; (%s + %X) %% 100 \n" $hash_value "$2" | bc
}

tmux -2 new-session -d -s $SESSION

tmux set -g status-fg colour$(hash_string256 $HOST)
tmux set -g status-bg colour$(hash_string256 $HOST 127)

# Attach to session
tmux -2 attach-session -t $SESSION

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.

Para ninguno de los sistemas GNU

Si su sistema tiene en md5lugar de md5sumla línea

hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")

puede ser reemplazado con

hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")
Raphael Ahrens
fuente
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.
Caleb