Atualmente, não há uma maneira direta de redefinir a vinculação de uma chave ao padrão. a inicialização das ligações padrão (em key_bindings_init()
) é feita uma vez quando o servidor tmux é iniciado pela primeira vez (em server_start()
) e não há mecanismo para redefinir uma única chave.
Para o cenário desejado em que você deseja acionar o arquivo de configuração para restabelecer uma ligação padrão que foi anteriormente substituída por uma ligação personalizada que foi excluída do arquivo de configuração, o método que você criou é razoável (embora infelizmente detalhado) ): unbind-key -a
, em seguida, restabeleça todas as ligações "padrão" e, em seguida, estabeleça suas ligações personalizadas (algumas das quais podem substituir uma ligação "padrão").
As ligações atuais de um servidor podem ser extraídas com o comando list-keys
* ; Isso pode ajudar a gerar / manter seu arquivo .tmux.reset.conf
proposto, mas você precisa de uma maneira de extrair as ligações padrão , não as ligações atuais .
*
Existem algumas situações em que a saída de list-keys
não é atualmente utilizável diretamente: a ligação para ponto-e-vírgula precisa de seu ponto-e-vírgula escapado com uma barra invertida para evitar que ele seja interpretado como um separador de comando tmux e quaisquer ligações que tinha argumentos que usavam aspas duplas dentro de citações simples (nenhuma das ligações padrão são assim) aparecerão como aspas duplas dentro de qoutes duplos .
Para obter as ligações padrão, você precisa de um servidor temporário com uma configuração mínima (ou seja, sem ligações personalizadas) para poder capturar sua list-keys
output. Não há limite para o número de servidores tmux que você pode executar, mas cada um deve usar um nome de caminho de soquete diferente; as opções -L
e -S
tmux podem ser usadas para especificar um nome de soquete (em $TMPDIR/tmux-$UID
ou nome de caminho de soquete completo. Então, para conversar (ou iniciar) um novo servidor em um soquete chamado temp
, você usaria isso:
tmux -L temp …
Para garantir que ele não use seu .tmux.conf
, use -f
para informar a leitura de /dev/null
(um arquivo especial que está sempre vazio):
tmux -f /dev/null -L temp …
Nota : isso não impede o processamento de /etc/tmux.conf
, se tal arquivo existir; o caminho para esse "arquivo de configuração do sistema" é codificado e não há opção para contorná-lo (a não ser que o código esteja sendo corrigido).
Normalmente, você precisa de um comando new-session
para realmente iniciar o servidor, mas não queremos que nenhuma sessão, apenas um servidor inicializado, consulte. O comando start-server
faz exatamente isso: inicia um servidor sem criar nenhuma sessão.
tmux -f /dev/null -L temp start-server …
Agora, precisamos apenas anexar nosso comando "query" ( list-keys
neste caso):
tmux -f /dev/null -L temp start-server \; list-keys
Nota : o ponto e vírgula precisa ser escapado ou citado para evitar que o shell o trate como um separador de comandos shell, já que queremos que seja um separador de comandos tmux .
Como não há sessões para manter, o servidor sairá automaticamente após concluir a execução do comando list-keys
.
Assim, você pode usar um comando como este para gerar a maior parte do seu .tmux.reset.conf
sem ter que se preocupar em remover temporariamente o arquivo .tmux.conf
(para que você veja apenas as ligações padrão) e sem ter que desligar servidores existentes.
Se o comando run-shell
fosse síncrono, você poderia incorporar uma chamada assim em seu arquivo de configuração (capturando em um arquivo temporário que você processaria com source-file
) em vez de ter um arquivo estático (seu .tmux.reset.conf
) . Isso permitiria que você sempre usasse as ligações padrão de sua versão atual do tmux (as ligações padrão são alteradas ocasionalmente). Infelizmente, a conclusão do comando run-shell
é atualmente assíncrona em relação aos comandos subseqüentes (os comandos que vêm depois de um comando run-shell
geralmente são executados antes que o processo gerado por run-shell
tenha a chance de ser concluído).