Al momento non esiste un modo diretto per ripristinare il legame di una chiave al suo valore predefinito; l'inizializzazione dei binding predefiniti (in key_bindings_init()
) viene eseguita una volta all'avvio del server tmux (in server_start()
) e non esiste alcun meccanismo per reimpostare una singola chiave.
Per il vostro scenario desiderato in cui si desidera l'atto di approvvigionamento il file di configurazione di ristabilire un legame che è stato precedentemente ignorato da un legame che da allora è stato eliminato dal file di configurazione personalizzata di default, il metodo che si elaborata è ragionevole (anche se purtroppo verbose): unbind-key -a
, quindi ristabilire tutti i bind "predefiniti", quindi stabilire i bind personalizzati (alcuni dei quali potrebbero sostituire un bind "predefinito").
I binding correnti di un server possono essere estratti con il list-keys
comando * ; questo può aiutare a generare / mantenere il .tmux.reset.conf
file proposto , ma è necessario un modo per estrarre i binding predefiniti , non i binding correnti .
* Ci sono alcune situazioni in cui l'output di list-keys
non è attualmente direttamente utilizzabile: la rilegatura per punto e virgola necessita che il suo punto e virgola sia sfuggito a una barra rovesciata per impedire che venga interpretato come un separatore di comandi tmux e qualsiasi associazione che avesse argomenti che utilizzavano virgolette doppie all'interno di un singolo le virgolette (nessuna delle associazioni predefinite sono così) verranno visualizzate come doppie virgolette all'interno di doppie qoutes.
Per ottenere i bind predefiniti è necessario un server temporaneo con una configurazione minima (ovvero senza bind personalizzati) in modo da poterne catturare l' list-keys
output. Non vi è alcun limite al numero di server tmux che è possibile eseguire, ma ognuno deve utilizzare un nome percorso socket diverso; le opzioni -L
e -S
tmux possono essere utilizzate per specificare un nome socket (in $TMPDIR/tmux-$UID
o nome percorso socket completo. Quindi, per parlare (o avviare) un nuovo server su un socket chiamato temp
, si dovrebbe usare questo:
tmux -L temp …
Per assicurarti che non usi il tuo .tmux.conf
, lo usi -f
per dirgli di leggere /dev/null
(un file speciale che è sempre vuoto):
tmux -f /dev/null -L temp …
Nota : questo non impedisce l'elaborazione di /etc/tmux.conf
, se esiste un tale file; il percorso di questo "file di configurazione del sistema" è hardcoded e non esiste alcuna opzione per bypassarlo (a parte il patching del codice).
Normalmente, è necessario un new-session
comando per avviare effettivamente il server, ma non vogliamo alcuna sessione, ma solo un server inizializzato da interrogare. Il start-server
comando fa proprio questo: avvia un server senza creare alcuna sessione.
tmux -f /dev/null -L temp start-server …
Ora, dobbiamo solo aggiungere il nostro comando "query" ( list-keys
in questo caso):
tmux -f /dev/null -L temp start-server \; list-keys
Nota : il punto e virgola deve essere sottoposto a escape o quotato per impedire alla shell di trattarlo come un separatore di comandi di shell poiché vogliamo che sia un separatore di comandi tmux .
Poiché non ci sono sessioni da mantenere, il server verrà chiuso automaticamente al termine dell'esecuzione del list-keys
comando.
Quindi, puoi usare un comando come questo per generare la maggior parte dei tuoi .tmux.reset.conf
senza doversi preoccupare di rimuovere temporaneamente il tuo .tmux.conf
file (per farti vedere solo i bind predefiniti) e senza chiudere alcun server esistente.
Se il run-shell
comando era sincrono, è possibile incorporare una chiamata come questa nel file di configurazione (acquisizione in un file temporaneo con il quale si elaborerebbe quindi source-file
) anziché disporre di un file statico (il proprio .tmux.reset.conf
). Ciò ti consentirebbe di utilizzare sempre i collegamenti predefiniti della versione corrente di tmux (i collegamenti predefiniti cambiano di tanto in tanto). Purtroppo, il completamento del run-shell
comando è attualmente asincrono rispetto ai comandi successivi (i comandi che vengono dopo un run-shell
comando di solito verranno eseguiti prima che il processo generato da run-shell
abbia avuto la possibilità di terminare).