tmux status-bar rusak setelah catting file biner, bagaimana cara mereset?

94

Saya tidak sengaja mengacaukan terminal tmux saya setelah catmemasukkan file biner. Sekarang saya tmuxkacau. Melepaskan dan melampirkan kembali tidak membantu, juga tidak redraw (Cb r). Menjalankan resethanya menggambar ulang panel aktif, bukan sisanya. Menjalankan di ssty sanedalam atau di luar tmuxtidak membantu.

tmux kacau

Dalam setiap panel, saya memiliki umpan balik normal dari apa yang saya ketik (panggilan awal resetsegera setelah terminal kacau menyelesaikan ini), tetapi saya sepertinya tidak bisa memperbaiki status-bar.

Dalam gnome-terminal, setiap pembaruan ke bilah status mengarah ke bilah status untuk tumbuh (lihat tangkapan layar di atas). Misalnya, ini terjadi ketika saya menjalankan aplikasi baru, ketika saya mengganti panel, atau ketika saya mengubah ukuran panel. Memaksa redraw (By C-b r, dengan menjalankan resetatau melalui menu terminal gnome) menyusut kembali status-bar ke satu baris, tetapi tetap rusak.

Di xterm, bilah status tetap berada dalam satu baris, tetapi tetap rusak seperti yang digambarkan.

Saya menggunakan tmux 1.5.

  • Bagaimana cara memperbaiki tmux-terminal saya ?

Laporan bug ini dari 2008 tampaknya menggambarkan masalah yang sama, tetapi ditandai sebagai diperbaiki. Saya tidak tahu versi apa yang diperbaiki, tetapi tmux 1.5 harus menyertakan perbaikan dari 2008.

gerrit
sumber
Baru saja mengalami masalah ini, dan "jelas" bekerja untuk saya.
user149818
1
Jika seseorang mengalami masalah yang sama, setelah melakukan semua hal di atas, status bar tmux saya masih kacau. Pengaturan opsi jendela status-kanan memperbaikinya.
2
Saran di atas memperbaikinya juga untuk saya. Perintah untuk melakukan itu adalah: Control+ b+ :dan kemudian set -g status-right "#H"untuk mengatur status-kanan ke nama host.
Mayank

Jawaban:

85

Coba ganti nama jendela 4

  • Beralih ke jendela 4: Control+b 4
  • Ganti nama jendela: Control+ b , Control+ umyNewname

(Itu koma di tengah)

Atau: Control+b :rename-window myNewname

Rqomey
sumber
1
Mengganti nama jendela berfungsi seperti pesona
exhuma
4
Anda harus menghapus nama sebelum mengetik yang baru. Cara termudah adalah dengan ctrl+u, jadi urutan lengkapnya adalahctrl+b , ctrl+u newname
z0r
1
Manis - ini berfungsi byobujuga ( f8, <newname>)
ali_m
Mengapa Control-udibutuhkan? Control-,sudah mengganti nama kan? Meskipun saya dapat mengkonfirmasi bahwa itu diperlukan dalam kasus saya, apakah ini semacam karakter reset?
hbogert
1
Control-u membersihkan garis. jika Anda setiap pencari kata sandi di terminal dan mengetahuinya, Anda dapat menghapus entri menggunakan control-u, alih-alih memukul mundur 20 kali
Rqomey
55

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.

Tino
sumber
2
Harap perhatikan uname -nbukan hostname -s. hostnameberbahaya dalam rootkonteks, karena Anda mungkin berakhir dengan host Anda diganti namanya -sdi Linux / Unix yang lebih tua di mana hostnametidak ada opsi grok.
Tino
Tidak mengatur ulang judul panel membuat saya sedih juga; itu sebabnya aku bahkan ada di sini. Terima kasih telah menjadi satu-satunya di halaman yang setidaknya mengakui kekurangan itu!
EvanED
2
Pertimbangkan juga "tmux setw automatic-rename" setelah memperbaiki judul jendela
EB.
Bagian itu stty sanemembantu saya ketika terminal saya kacau dan tidak menunjukkan apa-apa. Terima kasih!
johnny
Jika Anda menginginkan "bit yang hilang", yaitu perintah yang sedang berjalan ditampilkan di area status kiri, Anda dapat menggunakan perintah tmux set-window-option automatic-rename.
David Foerster
26

Masalah khusus yang Anda lihat berkaitan dengan nama / judul jendela 4. Kombinasi terlalu panjang (jelas) dan mengandung karakter aneh yang menyebabkan tmux untuk mengukurnya lebih pendek (sehingga gagal membatasi dengan benar bilah status untuk lebar layar) Saya tidak yakin bagaimana cara mengatur ulang (pada saya itu melacak nama proses latar depan), Anda mungkin harus menutup jendela.

Random832
sumber
4
default untuk mengubah nama jendela adalah^b - ,
Rob
8
Dalam hal pintasan keyboard dalam komentar @ Rob membingungkan Anda, itu Ctrl- blalu ,.
Doug Paul
Perhatikan bahwa ketika Anda mengubah nama jendela, bidang sudah diisi sebelumnya dengan nama jendela saat ini (dan kursor Anda ada di akhir nama itu). Karena nama jendela saya adalah urutan panjang dari sampah, saya harus menahan Backspacesebentar untuk menghapus nama saat ini. Bagi saya, umpan balik visual akhirnya memperjelas bahwa seluruh nama lama telah dihapus.
Doug Paul
Anda juga dapat menggunakan Ctrl-b :rename-window <name goes here>; ini menggunakan sistem perintah tmux alih-alih pintasan keyboard untuk perintah itu.
Abbafei
5

lakukan saja ini $ reset && tmux rename-window <new_window_name>

John Morales
sumber
5
tmux set-option -g status off && tmux set-option -g status on 

Memperbaiki ini untuk saya ketika sesuatu selain nama jendela rusak dan saya tidak bisa diganggu untuk mencari tahu apa itu.

Harald Wagener
sumber
2

tmuxmungkin hanya merupakan bagian dari masalah. Anda mungkin harus memohon stty sanedi baris perintah. Ini me-reset driver TTY di-kernel ke beberapa set nilai default yang biasanya membiarkan Anda melanjutkan. Jika driver TTY cukup kacau, Anda mungkin harus mengetikkan stty sane"blind", yaitu, tanpa umpan balik di layar.

Bruce Ediger
sumber
stty sanejuga tidak memecahkan masalah. Saya memang memiliki umpan balik di layar, dalam setiap tmuxpanel saya dapat mengetik dan menerima umpan balik seperti biasa, tetapi segera setelah tmux perlu menggambar sesuatu (misalnya menjalankan aplikasi baru, mengganti atau mengubah ukuran panel) bilah status bergerak ke panel ...
gerrit
2

Coba muat ulang file konfigurasi Anda?

Ctrlb, kemudian: :source-file ~/.tmux.conf

Tidak sekarang
sumber
solusi terbaik sejauh ini.
dave
-3

untuk memperbaiki masalah bagi saya:

Saya baru saja membunuh panel masalah dan jendela, dan membuat jendela dan panel baru.

Di panel masalah, CTRL+ AXdan CTRL+ AC.

itech
sumber
jalan ini untukku lagi. tidak ada cara lain yang bisa membantu
itech