La status bar, e i formati
La riga in fondo è l'unica parte di tmux che guardi di continuo. Vale la pena metterci quello che ti serve davvero — che di solito è meno di quello che ci mettono i temi pronti.
Tre zone, e un linguaggio di sostituzione
| Opzione | Zona |
|---|---|
| status-left | a sinistra · di fabbrica il nome della sessione |
| window-status-format | ogni finestra non attiva |
| window-status-current-format | la finestra attiva |
| status-right | a destra · di fabbrica nome macchina, data e ora |
| status-justify | dove sta l'elenco: left, centre, right |
| status-position | bottom o top |
| status-interval | ogni quanti secondi si aggiorna · 15 di fabbrica |
Dentro queste stringhe valgono le variabili di formato, la stessa sintassi
#{...} già incontrata con #{pane_current_path}. Ce ne
sono a centinaia — tmux list-formats… anzi, più semplicemente
tmux display -p '#{...}' per provarne una.
| Variabile | Contenuto |
|---|---|
| #S | nome della sessione |
| #I · #W · #P | indice finestra · nome finestra · indice pannello |
| #H · #h | nome della macchina, completo / senza dominio |
| #{pane_current_command} | il programma in esecuzione nel pannello |
| #{pane_current_path} | la cartella del pannello |
| #{session_windows} | quante finestre ha la sessione |
| #{?condizione,sì,no} | condizionale: sceglie in base a una variabile |
| #(comando) | esegue un comando di shell e ne inserisce l'output |
| #[fg=colour214,bold] | cambia lo stile da lì in poi |
#{} e #() conta. Le
graffe sono variabili interne, costano nulla. Le tonde lanciano un processo
a ogni aggiornamento: con status-interval 1 e tre comandi
dentro, stai avviando tre processi al secondo per sempre. Tieni l'intervallo a 15
e i comandi esterni al minimo, oppure falli scrivere su un file da un cron e leggi
il file.
Una status bar sobria
# posizione e ritmo set -g status-position bottom set -g status-justify left set -g status-interval 15 # colori di base set -g status-style "bg=colour235,fg=colour245" set -g message-style "bg=colour214,fg=colour235" set -g pane-border-style "fg=colour238" set -g pane-active-border-style "fg=colour214" # sinistra: la sessione, ben visibile set -g status-left-length 30 set -g status-left "#[bg=colour214,fg=colour235,bold] #S #[default] " # finestre: indice, nome, e Z se un pannello è zoomato setw -g window-status-format " #I #W " setw -g window-status-current-format "#[bg=colour238,fg=colour223,bold] #I #W#{?window_zoomed_flag, Z,} " setw -g window-status-separator "" # destra: macchina e ora, niente di più set -g status-right-length 40 set -g status-right "#[fg=colour245] #h %H:%M "
I colori: i tre modi di scriverli
| Forma | Quando usarla |
|---|---|
| colour214 | indice della tavolozza a 256 colori: funziona ovunque |
| #ffb000 | colore esatto · richiede il true color attivo (lezione 6) |
| red, green, brightblue | i sedici colori base: seguono il tema del terminale, quindi restano coerenti |
Se vuoi vedere la tavolozza per scegliere un numero, questa riga la stampa tutta:
$ for i in {0..255}; do printf "\e[48;5;%sm%4d\e[0m" $i $i; \
[ $((($i+1)%16)) -eq 0 ] && echo; doneSegnalare l'attività in una finestra che non stai guardando
setw -g monitor-activity on set -g visual-activity off # evidenzia, ma senza messaggio invadente setw -g window-status-activity-style "fg=colour214,bold" # avvisa quando un pannello resta in silenzio per 30 secondi # (cioè: la compilazione lunga è finita) prefix : setw monitor-silence 30
monitor-silence è il modo giusto di aspettare una cosa
lunga. Lanci la compilazione, passi a un'altra finestra, e quando
l'output si ferma il nome della finestra si illumina. Molto meglio che tornare a
controllare ogni due minuti.
Indicatori che si accendono solo quando servono
Il condizionale #{?variabile,se-vero,se-falso} permette di mostrare
una cosa solo quando è vera, invece di riservarle spazio per sempre. È così che si
fa una status bar densa di informazioni ma quasi sempre vuota.
# il prefix è stato premuto: lo vedi mentre tmux aspetta il comando set -ga status-left "#{?client_prefix,#[bg=colour214#,fg=colour235] PREFIX ,}" # i pannelli sono sincronizzati: avviso rosso, impossibile ignorarlo set -ga status-left "#{?pane_synchronized,#[bg=colour124#,fg=white#,bold] SYNC ,}" # sei in modo copia set -ga status-right "#{?pane_in_mode, [#{pane_mode}] ,}" # sei dentro una sessione annidata via ssh (lezione 9) set -ga status-right "#{?#{==:#{SSH_CONNECTION},},, #[fg=colour170]remoto }"
Nota le virgole precedute da # dentro le parentesi graffe: servono a
dire a tmux che quella virgola fa parte dello stile e non separa i rami del
condizionale. È l'errore che rende illeggibili metà delle configurazioni trovate
in rete.
L'indicatore del prefix, in particolare
Vale per tutti ma è decisivo per chi comincia: mostra una targhetta accesa nel mezzo secondo in cui tmux sta aspettando il tasto successivo. Elimina di colpo il dubbio «l'ho premuto o no?», che è la causa del 90 per cento delle scorciatoie che «non funzionano».
tmux-powerline o i
vari «dracula per tmux» sono belli da vedere e pesanti da mantenere: molti lanciano
una decina di script a ogni aggiornamento, e su una connessione SSH lenta si
sente. Se ti piace l'estetica, prendi le quattro righe che ti servono invece
dell'intero pacchetto.