Imposta il colore della linea di stato di tmux in base al nome host


10

Vorrei tmuxscegliere un colore in modo dinamico in base al nome host della macchina. Dal momento che condivido il mio tmux.confsu più macchine, assegnare un colore unico per ciascuno di quegli host sarebbe utile visivamente, specialmente quando si lavora su più di uno dei simultaneamente. È fattibile?

Risposte:


3

Volevo anche questa funzione. Fondamentalmente ho unito tutto in questo .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

Ho rimosso usando bcperché non l'avevo nel mio git-bash. Quindi volevo che funzionasse sia su sistemi Linux che su Windows con Cygwin senza aggiungere altro.


Temo che questa potrebbe essere una domanda sciocca, ma come la uso esattamente? L'ho copiato / incollato ma dopo aver ricaricato il mio .tmux.confho ottenuto "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Tuttavia, la mia barra di stato è diventata davvero rossa !!!

3

Mi è venuta in mente la seguente funzione 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
}

Questa funzione può essere utilizzata in questo modo (I risultati sono veri se lo $HOSTè LOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Per connetterlo con tmuxte puoi usare uno script che si avvia 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

Per il nome host LOLimposterebbe status-fgsu colour113e status-bgsu colour240. Il numero 127 $(hash_string256 $HOST 127)è lì, quindi lo sfondo non sarà lo stesso del colore di primo piano e sarà molto diverso l'uno dall'altro.

Per nessuno dei sistemi GNU

Se il tuo sistema ha md5invece md5sumla linea

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

può essere sostituito con

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

Se qualcuno conoscesse un modo per usare la funzione all'interno, lo tmux.confapprezzerei.
Raphael Ahrens,

1
La mia configurazione di tmux include un modo per definire ed eseguire funzioni di shell arbitrarie contenute nel file conf di tmux.
Caleb,

@Caleb interessante. Al momento non ho il tempo di modificarlo nella risposta. Ma lo aggiungerò.
Raphael Ahrens,

1
Si potrebbe desiderare di renderlo un finale alternativo per la risposta piuttosto che inserirla come risposta principale perché è probabile che confonda il diavolo di chiunque non abbia un guscio avanzato avanzato sotto la cintura. La soluzione è un hack che coinvolge here-docs e per ottenere sia un file di configurazione che uno script eseguibile dallo stesso file, quindi l'implementazione richiede una modifica all'intero file di configurazione, non solo l'aggiunta di un paio di righe. Fare la cosa giusta non sarà per tutti, quindi dai loro un modo per modificare la loro configurazione normale usando script esterni prima di suggerire che possono essere uniti.
Caleb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.