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).