Tmux dan ZSH custom prompt: bug dengan nama jendela

43

Saya telah mengkustomisasi prompt ZSH saya dengan oh-my-zsh agar lebih mudah dibaca dan menambahkan informasi tentang git jika saya berada di repositori.

Contoh:
bob@inf [~/docs] %
bob@inf [~/src/nicest] master %(dalam repositori git)

Ini bekerja dengan baik tetapi saya memiliki beberapa bug dengan tmuxdan nama jendela. Ini masih menampilkan nilai yang tidak masuk akal dan saya tidak dapat menonaktifkannya dengan automatic-rename off(itu hanya tidak berfungsi, nama jendela berubah setelah setiap perintah), untuk contoh pertama menggunakan tmux ~/docsuntuk nama jendela.

Saya tidak yakin bagaimana cara memperbaikinya, saya ingin tetap menjalankan zsh prompt saya, jika dapat melakukan perubahan tetapi ingin memahami di mana masalahnya?

Solusi lain mungkin dengan mendefinisikan ulang perintah settile(dari jawaban ini ) tetapi saya tidak yakin bagaimana melakukannya dengan cara yang benar.

Adrien Coquio
sumber

Jawaban:

76

Aku mengintip oh-my-zsh dan menemukan seorang tersangka .

Ketika nilai variabel lingkungan TERM dimulai dengan screen(yang seharusnya di bawah layar dan tmux ), ia menggunakan urutan kontrol terminal layar untuk mengatur nama jendela ke

  • (tepat sebelum menampilkan prompt shell)
    bagian paling kiri dari jalur "tilde kompresi" dari direktori kerja saat ini ( ..diikuti oleh 13 karakter terakhir atau seluruh jalur jika kurang dari 15 karakter) dan
  • (hanya sebelum memulai perintah)
    yang pertama “kata” dari sekitar-to-be-menjalankan perintah (tidak termasuk ssh, sudodan beberapa orang lain).

Kedengarannya seperti ini bekerja untuk Anda (Anda mengatakan bahwa nama jendela Anda berubah ~/docsketika Anda berada di direktori itu). Jika Anda ingin menonaktifkan penggantian nama otomatis ini, Anda dapat menonaktifkannya sepenuhnya dengan mengatur parameter shell DISABLE_AUTO_TITLE ke truedalam .zshrc:

DISABLE_AUTO_TITLE=true

Jika Anda hanya mengatur ini di shell interaktif, Anda akan berakhir dengan string kosong untuk nama jendela saat ini, tetapi oh-my-zsh akan berhenti memperbarui jendela sebelum setiap prompt dan perintah dalam contoh shell (perlu di Anda .zshrcuntuk memengaruhi semua instance shell baru).

Chris Johnsen
sumber
4
Ini jawaban yang sempurna. Akurat, informatif, ringkas dan to the point. Selain itu, ini memberikan solusi selain menjawab pertanyaan awal ("memahami di mana masalahnya"). Hanya menyedihkan bahwa siapa pun yang mengambil waktu untuk bertanya tidak repot-repot menandai ini sebagai jawabannya.
dmondark
Terima kasih terima kasih terima kasih terima kasih terima kasih terima kasih
Jezen Thomas
di mana .zshrcfile untuk semua pengguna?
andilabs
29

Saya tahu bahwa jawaban di atas memberi Anda solusi, tetapi satu lagi adalah dengan menambahkan opsi ini pada ~ / .tmux.conf Anda

set-option -g allow-rename off
albertogg
sumber
Ini adalah solusi yang lebih baik karena hanya mempengaruhi tmux.
Paul Oliver
Bahkan dengan pengaturan ini, join-pane diikuti oleh break-pane me-reset nama jendela :(
djsadinoff
6

Saya bertemu dengan masalah yang sama, yaitu nama jendela tmux diubah bahkan dengan menetapkan .tmux.conf:

set-window-option -g automatic-rename off

Terima kasih jawaban Chris. Nama jendela tmux saya tidak diganti nama secara otomatis setelah saya berubah:

set -g default-terminal "screen-256color"

untuk:

set -g default-terminal "xterm-256color"
rwxrwxrwx
sumber
0

Jika Anda ingin menonaktifkan ganti nama otomatis hanya untuk jendela tertentu maka Anda dapat menggunakan:

 set -t [WINDOW_NUMBER] automatic-rename off

Nonaktifkan ganti nama otomatis di jendela tertentu di sesi lain:

 set -t [SESSION]:[WINDOW_NUMBER] automatic-rename off
Viktor Nonov
sumber