$ tmux — corso in 10 lezioni
Lezione 08 di 10

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.

Teoria

Tre zone, e un linguaggio di sostituzione

sito 1:codice 2:server* 3:log web-01 · 14:32
OpzioneZona
status-lefta sinistra · di fabbrica il nome della sessione
window-status-formatogni finestra non attiva
window-status-current-formatla finestra attiva
status-righta destra · di fabbrica nome macchina, data e ora
status-justifydove sta l'elenco: left, centre, right
status-positionbottom o top
status-intervalogni 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.

VariabileContenuto
#Snome della sessione
#I · #W · #Pindice finestra · nome finestra · indice pannello
#H · #hnome 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
La differenza tra #{} 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.
Pratica

Una status bar sobria

~/.tmux.conf
# 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

FormaQuando usarla
colour214indice della tavolozza a 256 colori: funziona ovunque
#ffb000colore esatto · richiede il true color attivo (lezione 6)
red, green, brightbluei 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:

i 256 colori con il loro indice
$ for i in {0..255}; do printf "\e[48;5;%sm%4d\e[0m" $i $i; \
    [ $((($i+1)%16)) -eq 0 ] && echo; done

Segnalare l'attività in una finestra che non stai guardando

notifiche
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.
Trucco

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.

quattro indicatori condizionali
# 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».

PREFIX 1:codice 2:server* 3:log web-01 · 14:33
Sui temi pronti. Progetti come 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.