Definir a cor da linha de status do tmux com base no nome do host

10

Eu gostaria tmuxde escolher uma cor dinamicamente com base no nome do host da máquina. Como eu compartilho minhas tmux.confvárias máquinas, atribuir uma cor exclusiva a cada um desses hosts seria útil visualmente, especialmente ao trabalhar em mais de uma das máquinas simultaneamente. Isso é factível?

Sridhar Ratnakumar
fonte

Respostas:

3

Eu também queria esse recurso. Basicamente, mesclei tudo neste .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

Eu removi o uso bcporque não o tinha no meu git-bash. Assim, eu queria que ele funcionasse nos meus sistemas linux e janelas com o cygwin sem adicionar coisas extras.

DrMilk
fonte
Com medo de que essa seja uma pergunta boba, mas como eu a uso exatamente? Eu copiei / colei, mas depois de recarregar o meu .tmux.confeu consegui "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. No entanto, minha barra de status ficou vermelha !!!
3

Eu vim com a seguinte função 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 função pode ser usada assim (os resultados são verdadeiros, se $HOSThouver LOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Para conectá-lo, tmuxvocê pode usar um script que inicia e 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 o nome do host, LOLele definiria status-fgpara colour113e status-bgpara colour240. O número 127 in $(hash_string256 $HOST 127)está lá, portanto o plano de fundo não será o mesmo que a cor do primeiro plano e estará um distante do outro.

Para nenhum sistema GNU

Se o seu sistema tiver em md5vez da md5sumlinha

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

pode ser substituído por

hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")
Raphael Ahrens
fonte
Se alguém souber uma maneira de usar a função dentro do tmux.confeu agradeceria.
Raphael Ahrens
1
Minha configuração do tmux inclui uma maneira de definir e executar funções arbitrárias do shell independentes no arquivo conf do tmux.
Caleb
@ Caleb interessante. Atualmente, não tenho tempo para editá-lo na resposta. Mas eu vou adicioná-lo.
Raphael Ahrens
1
Você pode querer transformá-lo em um final alternativo para a resposta, em vez de inseri-la como a resposta principal, porque é provável que confunda o diabo de alguém que não tem um escudo avançado. A solução é um hack envolvendo documentos aqui e obter um arquivo de configuração e um script executável do mesmo arquivo, portanto, implementar isso requer uma alteração em todo o arquivo de configuração, não apenas adicionando algumas linhas. Fazer as coisas direito não será para todos, portanto, ofereça a eles uma maneira de editar suas configurações regulares usando scripts externos antes de sugerir que possam ser combinadas.
Caleb