Anda perlu dua urutan perintah untuk membersihkan kekacauan:
Pertama, jalankan ini di jendela yang rusak (ini berfungsi bahkan ketika Anda berada di ssh):
stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh
Kemudian jalankan ini di komputer yang menjalankan tmux(berfungsi di dalam dan di luar tmux):
Perintah berikut memengaruhi semua tmuxinstance, yang dapat mengubah status kiri lebih dari jendela saat ini. Jika Anda tidak membutuhkan fitur itu, tinggalkan saja.
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
Dijelaskan secara rinci
Ini dikumpulkan untuk membahas semua bit yang ditemukan di jawaban dan komentar lain. Saat ini tampaknya hanya sedikit yang tersisa dengan perintah kedua. (Lihat "bit yang hilang" di bawah).
Untuk memahami cara kerjanya, mari kita bunuh baris status tmuxdan tty. Setelah itu kita memperbaikinya lagi, menggunakan metode yang harus selalu tersedia (tidak seperti perintah reset).
Cara membuat tmuxterminal (menganggap UTF-8) tidak dapat digunakan
stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'
Peringatan: Setelah menjalankan perintah di atas, shell terlihat buta dan tuli dan sepertinya hanya berbicara omong kosong dalam beberapa bahasa asing yang tidak dikenal. Lihat di bawah tentang cara memperbaiki ini.
Dijelaskan:
stty -echo membunuh respons tipe terminal
printf '\016'tidak SO, jadi Anda berada di set karakter alternatif
printf '\033]2;%s\007' 'right status text'menetapkan status yang benar, dalam hal ini $'\355', yang memperlihatkan bug presentasi
printf '\033k%2000s\033\\' $'\302\217' menetapkan nama judul jendela
Ini mungkin kombinasi yang dapat Anda lihat di terminal setelah beberapa perintah interaktif jatuh dan jatuh kembali ke shell. (Dengan /bin/catAnda tidak dapat memprovokasi stty -echoIMHO, tetapi perintah interaktif seperti vimbiasanya mengatur ini.)
Sekarang bersihkan kekacauan ini
stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
Catatan: Jika Anda menggunakan salin dan rekatkan (Anda mungkin perlu menahan Shiftsambil menempel), Anda mungkin tidak dapat melihat rekatkan jika Anda telah menggunakan perintah di atas untuk mengacaukan tty. Oleh karena itu, cukup tekan tombol Enter setelah menempelkan ini.
Dijelaskan:
stty sane set parameter terminal "waras", sehingga Anda mendapatkan kembali gema Anda saat mengetik
printf '\033k%s\033\\' "$(basename "$SHELL")"mengatur judul jendela kembali normal. Anda dapat menggunakannya sebagai tmux rename-window "$(basename "$SHELL")"alternatif, namun tmux rename-windowterbatas pada tmuxtempat urutan escape selalu berfungsi.
printf '\033]2;%s\007' "$(uname -n)"mengatur ulang status-hak untuk ditampilkan sebagai default. (Perhatikan bahwa Anda tidak boleh menggunakan tmux set status-right "something", karena hanya menghasilkan pane titleyang rusak, jadi status-righthanya memperlihatkan beberapa bug presentasi. Juga perhatikan, bahwa saya tidak menemukan tmuxperintah untuk mengatur judul panel secara langsung.)
tput reset me-reset terminal, kalau-kalau ini telah kacau
tmux refresh menyegarkan layar untuk menghilangkan puing-puing lain yang mungkin muncul
Hilang sedikit
The printf '\033k%s\033\\' "$(basename "$SHELL")"looses kemampuan standar tmuxuntuk menyajikan perintah saat ini di area status kiri. Setelah printf '\033k%s\033\\' "something"dieksekusi kemampuan ini hilang dan saya tidak menemukan cara yang baik, namun, bagaimana mengembalikannya seperti sebelumnya.
Tetapi, seperti disebutkan dalam komentar di bawah, Anda dapat mengaktifkan fitur serupa tmuxsebagai pengganti dengan tmuxpengaturan berikut :
set-window-option automatic-rename on
Entah lakukan ini di tmuxbaris perintah, yang dapat dicapai di jendela saat ini dengan "Escape" :(di mana "Escape" adalah tmuxkunci perintah Anda ) dan kemudian masukkan perintah.
Atau keluar dari tmux set-window-option automatic-rename onterminal Anda saat ini, tetapi gagal jika Anda tidak berada pada level shell yang tepat, misalnya terminal tidak berfungsi di dalam sudoatau ssh.
Atau buka jendela lain di tmuxsesi saat ini dan jalankan perintah berikut:
for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
Atau buka shell lain ke komputer yang menjalankan tmuxdan menjalankan perintah berikut (ini di luar tmux):
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
PS: Terima kasih kepada semua yang telah membantu menyusun solusi ini.