Come posso associare più comandi tmux a una sequenza di tasti?


13

In particolare sto cercando di dare una notifica dopo che un comando è stato completato. Quindi, ad esempio, se ricarico il mio file di configurazione, mi piacerebbe avere qualche conferma del suo funzionamento, che potrebbe essere fatto in questo modo:

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

Questo , tuttavia, non funziona. Né altre cose che ho provato come metodi per mettere insieme i comandi.


1
Funziona per me (tmux 1.3 su Debian squeeze) con \;come separatore.
Gilles 'SO- smetti di essere malvagio' il

1
Ok, ho scoperto che \; fa il lavoro, e che è l'essenza della risposta che ho scelto qui di seguito. In qualche modo ho provato \; troppo rapidamente e determinato che non ha funzionato. Ma sto lasciando questa domanda qui poiché serve ancora a rispondere alla domanda su come farlo.
iconoclasta,

Risposte:


12

È possibile utilizzare l' run-shellopzione , ma la cosa fondamentale è separare i comandi\;

In questo caso, qualcosa del tipo:

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

run-shell shell-command
(alias: run)
Esegue il comando shell in background senza creare una finestra. Al termine, qualsiasi output su stdout viene visualizzato in modalità copia. Se il comando non restituisce esito positivo, viene visualizzato anche lo stato di uscita.


Ehi, grazie per la risposta. Non l'ho testato in modo specifico, ma non credo che funzionerà, poiché ho testato il codice nella mia domanda con \; e ha appena eseguito il secondo comando ma non il primo. E non so perché run-shell funzionerebbe, ma display-message no.
iconoclasta,

1
Ok, ho provato a testare la tua soluzione e tmux continua a bloccare, apparentemente (anche se non con assoluta certezza) da quel comando. Continuerò a provare, ma sono abbastanza sicuro che non funzionerà ...
iconoclasta il

Funziona su tmux 1.4. "Bloccare" significa "modalità copia", ovvero in base alla progettazione ...
jasonwryan,

okay, l'ho fatto funzionare, senza rinchiudere tmux. Ciò mi ha lasciato la domanda sul perché il mio tentativo originale di usare \; non ha funzionato:
iconoclast

1
Il cuore della tua risposta è usare \; - la parte su run-shell non è molto importante, e penso che per l'esempio che ho dato a display-message sia molto meglio. Quindi sto scegliendo la tua risposta sulla mia, ma ti dispiacerebbe modificare la risposta in modo da non fuorviare o confondere altre persone. Grazie!
iconoclasta,

4

Subito dopo aver composto la mia domanda ho pensato a qualcosa che potesse funzionare. L'ho provato e funziona, devi solo sopportare più file per la tua configurazione di tmux.

Ecco la soluzione, in particolare per quanto riguarda il ricaricamento della configurazione. Nel tuo file .tmux.conf, inserisci qualcosa del genere:

bind R source-file "$HOME/.tmux/reload.tmux"

Nel file ~ / .tmux / reload.tmux inserisci qualcosa di simile al seguente:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

Funziona perfettamente.


1
Questo è in realtà l'UNICO modo in cui funziona. Tutto il resto qui non funziona.
lzap,

Davvero? ... È da un po 'che non provo l'altro approccio, ma sarei sorpreso se tmux lo avesse rotto. Se sei assolutamente sicuro che non funzioni, allora proverò di nuovo e probabilmente accetterò invece questa risposta.
iconoclasta

Sì, mi scuso, la risposta di cui sopra funziona davvero :-)
lzap

1

L'uso del metodo run-shell inserisce l'output nel buffer di copia che richiede la cancellazione manuale. L'uso di un file di configurazione intermedio aggiunge il sovraccarico di mantenere un secondo file di configurazione. La combinazione di entrambe le risposte funziona meglio nel mio caso, poiché volevo che il messaggio scomparisse dopo un breve intervallo, simile a una finestra di dialogo a comparsa in una GUI, ma mantenendo tutto contenuto in un singolo file.

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"

0

C'è una patch che consente lo scripting completo all'interno di tmux, collegando il linguaggio tcl ai suoi interni.

http://ershov.github.io/tmux/

Inoltre, consente di specificare tutte le azioni desiderate per i tasti "mode".

Usandolo, il tuo codice sarebbe simile a:

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

o ancora più leggibile:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
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.