2012-09-10 8 views

risposta

10

Se si vuole sempre di Ca per

  • passare tra i riquadri quando la finestra attiva ha più di un riquadro, e
  • passare da una finestra quando la finestra attiva ha un solo riquadro,

quindi è possibile utilizzare un if-shell che conta il numero di riquadri nella finestra attiva per decidere tra last-pane e last-window:

bind-key C-a if-shell 'test $(tmux list-panes | wc -l) -gt 1' 'last-pane' 'last-window' 

Sarà ancora "fino a voi" per riorganizzare i riquadri quando si passa da una configurazione "ampia" a una "quadrata" (ad es. via break-pane e join-pane).


In tmux 1.8 if-shell e run-shell fare espansione formato, in modo da poter semplicemente il comando di shell un po ':

bind-key C-a if-shell 'test #{window_panes} -gt 1' 'last-pane' 'last-window' 
+0

Mi chiedo se esiste un modo meno ingombrante per verificare se la finestra corrente ha più di un riquadro o meno. Dovrebbe essere una di quelle variabili tmux, come '# {pane_count}', quindi possiamo usare il suo costrutto '# {? ,,}' piuttosto che lanciare una shell, e un altro tmux per fare IPC, in una pipe, e per 'wc -l'. Purtroppo non riesco a trovare una buona lista completa di tutte le variabili di tmux. Conosco almeno uno non documentato che è '# {pane_current_command}' che è stato utile. ** AGGIORNAMENTO ** L'ho trovato, è '# {window_panes}' che è "Numero di riquadri nella finestra". perfect –

+0

crap, quelle cose condizionali potrebbero funzionare solo per la costruzione di stringhe di stato, non per determinare quali comandi di shell eseguire. Sicuramente posso evitare il pipe per 'wc -l'. –

+0

@StevenLu: * tmux * 1.8 supporta le estensioni di formato in 'if-shell' (e' run-shell'), quindi puoi farlo in 1.8: 'bind Ca if-shell 'test # {window_panes} -gt 1' last-last last-window'. –

1

vorrei suggerire quanto segue (regolare 80 per distinguere tra le due larghezze di terminali)

if-shell '[ "$COLUMNS" -gt 80 ]' 'bind-key C-a "select-window -t :.+"' 'bind-key C-a "next-window"' 

ma sto né rovinare la sintassi, o COLUMNS non è impostato nel relativo tmux ambiente, in quanto l'espressione di shell sopra riportata è sempre falsa per me.

+2

'se-shell' e'-shell' familiare sono entrambi in corsa il contesto di (biforcato da) il server (non una sessione o un client particolare), quindi non avranno COLONNE (e nemmeno una tty su std {in, out, err}). È possibile ottenere la larghezza del client attivo più recente con qualcosa del genere: 'tmux list-clients -F '# {committenza} # {client_width}' | ordina -rn | capo -1 | cut -d '' -f' –

+0

IIRC, '$ COLUMNS' è una variabile bash, non una variabile di ambiente; quindi dovresti assicurarti che la shell che lo contiene fosse bash mentre stavi eseguendo il test. E, anche se lo fosse, non sarebbe necessariamente collegato alla stessa pty che l'utente sta guardando (o qualsiasi pty) mentre preme il tasto. – jpaugh