Bagaimana saya bisa secara otomatis memperbarui judul di layar xterm yang sedang berjalan?

14

Ini sedikit tindak lanjut dari pertanyaan ini . Saya bekerja di tcsh di dalam layar GNU dalam xterm .

Saya memiliki yang berikut ini di .cshrc saya:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

Dan ini bekerja dengan baik!

Namun, ketika saya menjalankan layar saya melihat bahwa judul tidak diperbarui dengan direktori saat ini. Bagaimana saya bisa membuat layar memperbarui judul xterm?

Nathan Fellman
sumber
Sudahkah Anda menemukan solusi yang berhasil untuk Anda?
Trey Hunner
Tidak. Saya mencoba jawaban yang disarankan tetapi tidak berhasil. Itu sebabnya saya tidak menerima mereka atau mengangkat mereka.
Nathan Fellman

Jawaban:

4

Anda dapat mengatur judul jendela xterm dengan menambahkan ini ke .tcshrcatau .cshrc(ganti precmdalias Anda saat ini ):

alias precmd 'echo -n "\033]0;${PWD}\a"'

Pastikan ini adalah satu-satunya alias yang ada di file Anda .cshrcdan .tcshrcsaat menggunakan ini. Metode ini menampilkan direktori saat ini sebagai judul jendela untuk saya di kedua xterm terminal gnome terlepas dari apakah sesi layar GNU terbuka.

Jawaban saya didasarkan pada ini .

Trey Hunner
sumber
3

Saya mengerti Anda menggunakan tcsh jadi ini mungkin tidak akan berhasil ... Kalau-kalau ada yang mencari cara bash untuk melakukan ini.

Jika sistem Anda (lokal / jarak jauh) sedang menjalankan bash maka Anda dapat menggunakan variabel lingkungan "PROMPT_COMMAND" untuk mengatur judul jendela. PROMPT_COMMAND dievaluasi sebelum permintaan ditampilkan.

(di .bashrc Anda):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007'

Penjelasan:

'history -a'

Ini mengatur shell untuk menambahkan ke file history setiap kali perintah selesai, bukan ketika seluruh shell selesai. (Ini tidak terkait dengan contoh ini).

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Ini menggemakan kode pelarian "\ 033] 0;" yang menetapkan judul jendela dengan variabel "user" @ "host" (menghapus kecocokan terlama dari kanan ke pertama ".") dan kemudian direktori kerja (mengganti '~' untuk '$ HOME').

Trik di atas akan bekerja dengan aplikasi terminal apa pun yang mendukung perubahan dinamis judul jendela (seperti iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm, dll.) Anda juga dapat melihat variabel shell "TITLEBAR" dalam dokumentasi bash, ini mirip.

wawawawa
sumber
1
ini tidak akan berfungsi ketika di dalam gnuscreen. setidaknya itu tidak bekerja untuk saya. Itulah sebabnya saya di sini :)
gcb
2

Ini harus bekerja di shell apa pun, tapi ini adalah hack .screenrc yang kotor. Ini mengambil alih garis hardstatus Anda untuk bekerja, yang mungkin tidak dapat diterima oleh beberapa pengguna. Tetapi ia bekerja di terminal gnome di Ubuntu terbaru, bahkan tanpa baris termcapinfo di bawah ini. Beberapa situasi mungkin memerlukan penyesuaian lebih dalam (misalnya, saya belum menguji Putty).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Ditemukan di tautan ini .

quack quixote
sumber
2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"
SirDice
sumber
1
Tetapi apakah ini akan memperbarui judul ketika menjalankanscreen
Nathan Fellman
1
Ini berfungsi baik dengan layar 4.00.02 + tcsh 6.12.00. Ini mengasumsikan Anda memiliki hardstatusset variabel layar yang sesuai dan dukungan termcap / terminfo hs|ts|fs|ds.
Darren Hall
apa yang dimainkan oleh hardstatus di sini?
gcb
2

Halaman ini (yang telah ditautkan di atas) adalah solusinya, namun Anda perlu memastikan string terminal entri sesuai dengan string id terminal Anda (yaitu; apa variabel TERM diatur ke) jika tidak maka tidak akan berpengaruh.

Berikut ringkasan dari apa yang saya lakukan, yang berhasil bagi saya setelah bertahun-tahun tidak menginvestasikan waktu yang cukup untuk mencari tahu:

  1. Cari tahu apa string ID terminal Anda dengan menjalankan:

    echo $TERM
    

    Mungkin akan mengatakan sesuatu seperti 'xterm' atau 'linux' atau 'rxvt'.

  2. Sekarang tambahkan baris berikut ke file .screenrc Anda (atau buat jika tidak ada) yang terletak di homedir Anda (~ / .screenrc):

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    Kuncinya adalah memastikan bahwa 'xterm' adalah string ID TERM Anda yang Anda dapatkan di atas. Anda dapat melakukan banyak baris untuk setiap jenis istilah berbeda yang Anda gunakan.

Sebagai contoh saya memiliki ini sebagai file .screenrc saya karena saya menggunakan kedua xterms dan tipe istilah 'linux' ketika SShing ke dalam kotak:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

Semoga ini bisa membantu, dan benar-benar shell agnostik. Ingat jika Anda menjalankan layar sebagai root, Anda perlu memodifikasi ~ root / .screenrc di samping file ~ / .screenrc Anda sendiri seperti ini.

Adam Strohl
sumber
1

Instruksi di sini memungkinkan saya untuk memperbarui judul di rxvt dari bash untuk saya - yang mungkin bukan bantuan apa pun tetapi saya pikir ini mungkin perlu diselidiki (bagian Informative Statusbar jika tautan tidak melompat ke bagian kanan halaman)

Barry
sumber