Essencialmente, estou procurando uma maneira de manter um terminal aberto executando o tmux e abrir novas janelas dentro da sessão, em vez de gerar novos terminais.
Ao pressionar uma sequência de teclas, gostaria de abrir um novo terminal se não houver um aberto. Mas se já houver uma aberta, gostaria de mudar para a área de trabalho, se necessário, e focar a janela, depois enviar o comando.
Eu encontrei a documentação para a ação If
para windows e esperava que houvesse uma construção semelhante para ações globais também, mas não estou vendo isso.
Editar: Solução
Acabei usando uma versão simplificada do script do jw013 .
O script original foi escrito para um efeito de terminal de terremoto, mas o que eu queria era mais simples: não alternar um terminal, mas simplesmente abrir sempre uma janela em uma única sessão de terminal do tmux. O componente chave que eu estava perdendo foi wmctrl
, que eu não tinha ouvido falar.
Usando o script do jw013 como base, simplifiquei para:
# the variable name for the window (used in openbox rc.xml for the rule as well)
wmclass=tmux_terminal
# if we successfully focus the window then open a new tmux window inside
if wmctrl -a $wmclass -x; then
tmux new-window
# otherwise the window hasn't been opened. open it and attach to tmux.
else
urxvt -name $wmclass -e tmux attach &
fi
Em seguida, vinculei isso a W-space
no openbox e configurei um aplicativo para name=tmux_terminal
para abrir maximizado no primeiro desktop. Agora, se o terminal não estiver aberto, W-space
irá abri-lo e anexá-lo ao tmux, senão, ele simplesmente irá para a janela de sessão tmux existente e abrirá uma nova janela dentro dele.