tmux no respeta el flujo de control deshabilitado

8

En mi shell tengo el control de flujo deshabilitado usando stty -ixon. Esto funciona perfectamente en el shell y cuando inicio tmuxe inicio programas dentro tmux.

Sin embargo, cuando se inicia una nueva sesión desde la línea de comandos y se inicia directamente un comando, la configuración del control de flujo no se respeta y ctrl-scongela el terminal.

Esto funciona:

tmux new-session -s foo
vim

Esto no respeta la sttyconfiguración de control de flujo:

tmux new-session -s foo vim

¿Cómo puedo desactivar el control de flujo incluso en este último caso?

Marco
fuente
¿Es suficiente deshabilitar el control de flujo todos juntos tmuxpara todos los casos, o está interesado en aclarar por qué funciona en el primer ejemplo pero no en el segundo?
slm
@slm En primer lugar, me gustaría arreglarlo. Sin embargo, me interesa por qué tmux se comporta como lo hace.
Marco

Respuestas:

5

Si tiene stty -ixonla inicialización de su shell, es bastante simple: cuando tmuxcrea nuevos terminales, ejecuta el shell predeterminado del usuario de forma predeterminada y eso a su vez deshabilita el flujo de control durante la inicialización. Sin embargo, cuando le pide a tmux que ejecute un comando específico (ViM en su caso), no se realiza la inicialización y se aplica la configuración predeterminada del terminal (control de flujo habilitado).

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

Debería solucionar su problema.

Peterph
fuente
5

Una solución alternativa que no requiere cambiar la tmuxllamada es incluir la sttyllamada en el archivo $HOME/.zshenv. ZSH analiza este archivo y lo utiliza incluso para shells no interactivos.

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

Los usuarios de BASH tienen que establecer la variable de entorno BASH_ENV=$HOME/.zshenvpara que esto funcione.

Marco
fuente
2
No sé lo que hace, pero funcionó. Lo agregó a ambos .zshrcy .zshenv. Pero ten cuidado con >eso. Uso:echo 'stty -ixon' >> ~/.zshenv
firedev