2011-10-31 17 views

risposta

14

Se tutto il resto è configurato correttamente, dovrebbe essere semplice come mettere questo nel vostro .tmux.conf:

set-option -g prefix Home 

Nota: A meno che manualmente “fonte” il tuo .tmux.conf, modifiche al file vorranno solo interesserà quando il server tmux viene riavviato. Chiudere in modo pulito tutti i riquadri, le finestre (chiudendo tutte le sessioni e lasciando uscire il server) oppure utilizzare tmux kill-server, quindi avviare una nuova sessione.

questo funziona solo se il vostro emulatore di terminale è l'invio di una sequenza di escape che corrisponde al campo della voce del database terminfo per il valore TERM in effetti khome quando ci si connette alla sessione tmux (cioè il TERM “al di fuori del” tmux).

generato sequenza di escape per la casa

È possibile verificare la sequenza di escape inviato dal proprio emulatore di terminale, digitando il tasto Home (e un ritorno a capo) in cat -v (è possibile interrompere gatto con controllo - C una volta che ti mostra la sequenza). Le risposte comuni potrebbero essere ^[[1~ o ^[OH.

atteso sequenza di escape per la casa

La variabile di ambiente TERM racconta programmi terminfo basati (come tmux) quello delle sequenze di escape tuo emulatore di terminale (presumibilmente) capisce e genera. La sequenza di escape generata dal tasto Home è memorizzata nel campo khome. È possibile utilizzare tput o infocmp per estrarre il valore del campo (entrambi utilizzano l'attuale TERM a meno che non venga fornita una dichiarazione terminale di priorità).

tput khome | cat -v ; echo 
infocmp -1 | grep -F khome 

La fissazione di un generato/Mancata corrispondenza atteso

Se la sequenza di escape generato dal tuo emulatore di terminale non corrisponde alla voce di khome per il vostro TERM valore dichiarato, poi ci sono diverse cose che si può fare per provare per risolvere il problema:

  1. Riconfigurare l'emulatore di terminale.
    Ciò può implicare l'utilizzo di un programma diverso, il prelievo di un'emulazione diversa o semplicemente la (ri) definizione della sequenza che invia quando si preme il tasto Home.
  2. Scegli un nuovo valore TERM che corrisponde meglio a quello che l'emulatore di terminale invia e capisce.
  3. Regola una voce del database terminfo in modo che corrisponda all'emulazione del terminale.
    È possibile utilizzare infocmp per estrarre e voce terminfo esistente e tic per compilare la voce modificata.
  4. indicare tmux per regolare le copie runtime delle voci del database terminfo.
    tmux fornisce l'opzione terminal-overrides che può essere utilizzata per sovrascrivere singoli campi di terminfo per vari valori TERM.

Ad esempio, se il vostro emulatore di terminale non invia una sequenza per la casa, ma è possibile configurare uno, e la voce terminfo per il vostro TERM non avere un campo khome, allora si potrebbe dire al vostro emulatore di terminale a invia ESC [1~ e usa termname:khome=\033[1~ per il tuo valore terminal-overrides (dove termname è un modello che corrisponde in modo adeguato al tuo valore TERM).

E.g. in .tmux.conf:

set-option -g terminal-overrides "xterm-color:khome=\033[1~" 

È possibile utilizzare tmux server-info per ispezionare tmux s’copie di esecuzione delle voci terminfo.

Nota: Come sopra (con il cambio prefix), il modo più semplice per far questo cambiamento diventerà effettivo è quello di riavviare il server di tmux.

+0

Grazie, ci sono un sacco di informazioni utili lì! – secondplanet

+0

Puoi spiegarlo meglio? cat -v mostra che il mio tasto Fine è^[[F, e tput kend mi dà^[OF –

+0

@RosePerrone: per i terminali stile xterm, '^ [[F' è la sequenza" modalità normale "per Fine, e'^[OF' è la sequenza "modalità applicazione" per End; il passaggio da una modalità all'altra avviene tramite sequenze di controllo (in genere i programmi interattivi oa schermo intero passano alla modalità applicazione mentre sono attivi). Tradizionalmente, la voce 'kend' documenta la sequenza" modalità applicazione ", che è ciò che vedi. Se una voce TERM ha 'smkx', puoi usare' tput smkx' per passare alla modalità "keyboard transmit" di ncurses, che di solito è un superset di "application mode". –

Problemi correlati