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 tmux
instance, 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 tmux
dan tty
. Setelah itu kita memperbaikinya lagi, menggunakan metode yang harus selalu tersedia (tidak seperti perintah reset
).
Cara membuat tmux
terminal (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/cat
Anda tidak dapat memprovokasi stty -echo
IMHO, tetapi perintah interaktif seperti vim
biasanya 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 Shift
sambil 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-window
terbatas pada tmux
tempat 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 title
yang rusak, jadi status-right
hanya memperlihatkan beberapa bug presentasi. Juga perhatikan, bahwa saya tidak menemukan tmux
perintah 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 tmux
untuk 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 tmux
sebagai pengganti dengan tmux
pengaturan berikut :
set-window-option automatic-rename on
Entah lakukan ini di tmux
baris perintah, yang dapat dicapai di jendela saat ini dengan "Escape" :
(di mana "Escape" adalah tmux
kunci perintah Anda ) dan kemudian masukkan perintah.
Atau keluar dari tmux set-window-option automatic-rename on
terminal Anda saat ini, tetapi gagal jika Anda tidak berada pada level shell yang tepat, misalnya terminal tidak berfungsi di dalam sudo
atau ssh
.
Atau buka jendela lain di tmux
sesi 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 tmux
dan 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.