Atualmente, não há uma maneira direta de redefinir a ligação de uma chave ao padrão; a inicialização das ligações padrão (in key_bindings_init()
) é feita uma vez quando o servidor tmux é iniciado pela primeira vez (in server_start()
) e não há mecanismo para redefinir uma única chave.
Para o seu cenário desejado onde deseja que o ato de terceirização de seu arquivo de configuração para restabelecer uma ligação que anteriormente foi substituído por uma ligação que já foi excluído do seu arquivo de configuração personalizado padrão, o método que desenvolveram é razoável (embora infelizmente detalhado): unbind-key -a
, restabeleça todas as ligações "padrão" e 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 list-keys
comando * ; isso pode ajudar a gerar / manter o .tmux.reset.conf
arquivo 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 é diretamente utilizável no momento: a ligação para ponto-e-vírgula precisa que seu ponto-e-vírgula escape com uma barra invertida para impedir que seja interpretado como um separador de comandos do tmux e quaisquer ligações que tivessem argumentos que usassem aspas duplas dentro de um único aspas (nenhuma das ligações padrão é assim) sairá 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
saída. 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 (no $TMPDIR/tmux-$UID
nome do caminho ou no soquete completo. Portanto, para conversar (ou iniciar) um novo servidor em um soquete chamado temp
, você usaria o seguinte:
tmux -L temp …
Para garantir que ele não use o seu .tmux.conf
, use -f
-o para ler /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 esse arquivo existir; o caminho para esse "arquivo de configuração do sistema" é codificado e não há opção para ignorá-lo (com exceção do patch do código).
Normalmente, você precisa de um new-session
comando para realmente iniciar o servidor, mas não queremos nenhuma sessão, apenas um servidor inicializado para consulta. O start-server
comando faz exatamente isso: inicia um servidor sem criar nenhuma sessão.
tmux -f /dev/null -L temp start-server …
Agora, precisamos apenas adicionar 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 impedir que o shell o trate como um separador de comandos do shell, pois queremos que ele seja um separador de comandos do tmux .
Como não há sessões a serem mantidas, o servidor será encerrado automaticamente após concluir a execução do list-keys
comando.
Portanto, você pode usar um comando como este para gerar a maior parte do arquivo .tmux.reset.conf
sem precisar se preocupar em remover temporariamente o .tmux.conf
arquivo (para ver apenas as ligações padrão) e sem precisar desligar os servidores existentes.
Se o run-shell
comando fosse síncrono, você poderia incorporar uma chamada como essa em seu arquivo de configuração (capturando em um arquivo temporário com o qual você processaria source-file
) em vez de ter um arquivo estático (seu .tmux.reset.conf
). Isso permitiria que você sempre use as ligações padrão da sua versão atual do tmux (as ligações padrão mudam ocasionalmente). Infelizmente, run-shell
atualmente a conclusão do comando é assíncrona em relação aos comandos subseqüentes (os comandos que vêm depois de um run-shell
comando geralmente são executados antes que o processo gerado run-shell
tenha a chance de terminar).