tmux: compartilhando o título da janela atual (#T) de dentro de sessões tmux aninhadas

5

Comecei a usar o tmux recentemente para melhorar minhas sessões de terminal. Uma coisa que eu preciso ser capaz de fazer é conectar-se a um servidor remoto, que também está executando o tmux. No entanto, descobri que o título da janela atual (denotado como #T no tmux) não é atualizado enquanto estiver dentro de um shell tmux secundário. Eu gostaria de atualizar o valor de primary-tmux-session de dentro da sessão secundária.

"# T" assume claramente o valor processado por PROMPT_COMMAND, que é um comando executado toda vez que o prompt é recarregado. No entanto, se eu me conectar a um servidor remoto, ele abrirá um shell do lado do servidor, que abrirá o tmux e executará um shell completamente novo na sessão do tmux secundário. A única maneira de saber como atualizar o título da janela principal do tmux é recarregar o prompt do lado do servidor, mas isso não acontece dentro de uma sessão secundária do tmux.

Existe algum comando para conectar as duas sessões para que elas compartilhem o #T? Eu originalmente pensei que poderia ser possível com a opção de substituição de terminal, mas ou não funciona ou eu configurei errado.

Quaisquer pensamentos ou sugestões seriam muito apreciados. Obrigada!

(PS. Eu suspeito que esta questão é mais adequada para o superusuário, mas eu já havia feito uma pergunta sobre estouro de pilha. Espero que este seja o fórum certo para esse tipo de pergunta)

    
por scicalculator 14.08.2011 / 08:29

1 resposta

2

Eu fiz algumas pesquisas e encontrei a resposta para mim. Bem, a maneira que encontrei para realizar minha prisão não é elegante, mas funcionará para que o trabalho seja feito.

Primeiro, você precisa ter a opção "set-titles" ativada em seu arquivo .tmux.conf. Assim como a string de título apropriada:

set -g set-titles on
set -g set-titles-string '#T'

No entanto, se você implementar isso, você notará imediatamente que não funciona. O problema é que isso só envia o fluxo de seqüência de caracteres de título se ele for iniciado em uma variante xterm (variável tmux / screen TERM é "screen *"). Portanto, ao iniciar uma sessão do tmux aninhada, você deve enganar o terminal, redefinindo a variável. O exemplo a seguir manterá o sufixo TERM (por exemplo, "-256color").

TEMP_TERM=$TERM
TEMP_TERM_SUFFIX=${TERM#$(echo $TERM | cut -f 1 -d'-')}
TERM="xterm${TEMP_TERM_SUFFIX}"

Não tenho certeza se isso é importante, mas acho que é inteligente redefinir o TERM novamente depois de fechar o tmux (portanto, salve-o em uma variável temporária). Usando isso, um script de shell simples pode ser feito para abrir uma sessão tmux aninhada que envia a variável de título #T para suas sessões pai.

Isso tudo funciona, mas é um pouco doloroso, considerando que o trabalho deve ser feito para garantir que loops infinitos de aninhamento não sejam criados no caso de iniciarmos automaticamente nosso shell no tmux. Se alguém tiver uma solução melhor, eu adoraria estar aqui também!

    
por 15.08.2011 / 10:11