tmux tidak menghargai aliran kontrol yang dinonaktifkan

8

Di shell saya, saya memiliki kontrol aliran dinonaktifkan menggunakan stty -ixon. Ini berfungsi dengan baik di shell dan ketika saya meluncurkan tmuxdan memulai program di dalamnya tmux.

Namun, ketika memulai sesi baru dari baris perintah dan langsung meluncurkan perintah, pengaturan kontrol aliran tidak dihormati dan ctrl-smembekukan terminal.

Ini bekerja:

tmux new-session -s foo
vim

Ini tidak menghormati sttypengaturan kontrol aliran:

tmux new-session -s foo vim

Bagaimana saya bisa menonaktifkan kontrol aliran bahkan dalam kasus terakhir?

Marco
sumber
Apakah cukup untuk menonaktifkan kontrol aliran bersama-sama di dalam tmuxsemua kasus, atau apakah Anda tertarik untuk mengetahui mengapa ini bekerja pada contoh pertama tetapi tidak pada yang kedua?
slm
@slm Pertama-tama saya ingin memperbaikinya. Namun demikian, saya tertarik mengapa tmux berperilaku seperti itu.
Marco

Jawaban:

5

Jika Anda memiliki stty -ixoninisialisasi shell Anda, itu cukup sederhana: ketika tmuxmembuat terminal baru, ia menjalankan shell default pengguna secara default dan pada gilirannya menonaktifkan aliran kontrol selama inisialisasi. Namun, ketika Anda meminta tmux untuk menjalankan perintah tertentu (ViM dalam kasus Anda), tidak ada inisialisasi yang terjadi dan pengaturan terminal default (kontrol aliran diaktifkan) berlaku.

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

harus memperbaiki masalah Anda.

peterph
sumber
5

Solusi yang tidak perlu mengubah tmuxpanggilan adalah dengan memasukkan sttypanggilan dalam file $HOME/.zshenv. File ini diurai oleh ZSH dan digunakan bahkan untuk shell yang tidak interaktif.

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

Pengguna BASH harus mengatur variabel lingkungan BASH_ENV=$HOME/.zshenvuntuk membuatnya berfungsi.

Marco
sumber
2
Saya tidak tahu apa fungsinya, tetapi itu berhasil. Menambahkannya ke keduanya .zshrcdan .zshenv. Hati-hati dengan itu >. Gunakan:echo 'stty -ixon' >> ~/.zshenv
firedev