tmux не уважает отключенный поток управления

8

В моей оболочке управление потоком отключено с помощью stty -ixon. Это прекрасно работает в оболочке и когда я запускаю tmuxи запускаю программы внутри tmux.

Однако при запуске нового сеанса из командной строки и непосредственном запуске команды настройка управления потоком не соблюдается и ctrl-sзамораживает терминал.

Это работает:

tmux new-session -s foo
vim

Это не относится к sttyнастройке управления потоком:

tmux new-session -s foo vim

Как я могу отключить управление потоком даже в последнем случае?

Marco
источник
Достаточно ли полностью отключить управление потоком данных во tmuxвсех случаях, или вам интересно узнать, почему это работает в первом примере, а не во втором?
SLM
@slm Во-первых, я бы хотел исправить это. Тем не менее, мне интересно, почему tmux ведет себя так, как он.
Марко

Ответы:

5

Если у вас есть stty -ixonинициализация вашей оболочки, это довольно просто: когда tmuxсоздаются новые терминалы, по умолчанию запускается оболочка пользователя по умолчанию, что в свою очередь отключает поток управления во время инициализации. Однако когда вы просите tmux запустить определенную команду (в вашем случае ViM), инициализация не происходит, и применяются настройки терминала по умолчанию (управление потоком включено).

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

должен исправить вашу проблему.

peterph
источник
5

Обходной путь, который не требует изменения tmuxвызова, состоит в том, чтобы включить sttyвызов в файл $HOME/.zshenv. Этот файл анализируется ZSH и используется даже для неинтерактивных оболочек.

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

Пользователи BASH должны установить переменную окружения, BASH_ENV=$HOME/.zshenvчтобы сделать эту работу.

Marco
источник
2
Я не знаю, что он делает, но он добился цели. Добавил это к обоим .zshrcи .zshenv. Будьте осторожны, >хотя. Использование:echo 'stty -ixon' >> ~/.zshenv
firedev