O tmux não respeita o fluxo de controle desativado

8

No meu shell, tenho o controle de fluxo desativado usando stty -ixon. Isso funciona perfeitamente no shell e quando tmuxinicio e inicio programas dentro tmux.

No entanto, ao iniciar uma nova sessão a partir da linha de comando e iniciar diretamente um comando, a configuração de controle de fluxo não é respeitada e ctrl-scongela o terminal.

Isso funciona:

tmux new-session -s foo
vim

Isso não respeita a sttyconfiguração de controle de fluxo:

tmux new-session -s foo vim

Como posso desativar o controle de fluxo, mesmo no último caso?

Marco
fonte
É suficiente desativar o controle de fluxo tmuxem todos os casos para todos os casos ou você está interessado em saber por que ele funciona no primeiro exemplo, mas não no segundo?
slm
@ slm Em primeiro lugar, gostaria de consertá-lo. No entanto, estou interessado em saber por que o tmux se comporta da mesma maneira.
Marco

Respostas:

5

Se você possui stty -ixona inicialização do seu shell, é bastante simples: quando tmuxcria novos terminais, ele executa o shell padrão do usuário por padrão e, por sua vez, desabilita o fluxo de controle durante a inicialização. No entanto, quando você solicita ao tmux para executar um comando específico (ViM no seu caso), nenhuma inicialização ocorre e as configurações padrão do terminal (controle de fluxo ativado) se aplicam.

tmux new-session -s foo "stty -ixon; vim"

deve corrigir seu problema.

peterph
fonte
5

Uma solução alternativa que não requer alteração da tmuxchamada é incluir a sttychamada no arquivo $HOME/.zshenv. Este arquivo é analisado pelo ZSH e usado mesmo para shells não interativos.

echo 'stty -ixon' | tee -a ~/.zshenv
# ... or ...
echo 'stty -ixon' >> ~/.zshenv

Os usuários do BASH precisam definir a variável de ambiente BASH_ENV=$HOME/.zshenvpara fazer isso funcionar.

Marco
fonte
2
Não sei o que faz, mas deu certo. Adicionado a ambos .zshrce .zshenv. Tenha cuidado com >embora. Uso:echo 'stty -ixon' >> ~/.zshenv
firedev 12/04