Apakah mungkin untuk mendapatkan nama saat ini dari jendela xterm?

9

LDP Howto ini menunjukkan cara mengubah judul xterm.

Saya tahu ini juga mungkin menggunakan xtitleperintah.

Sebelum memohon tindakan yang sudah berjalan lama, skrip saya menggunakan teknik seperti itu untuk mengubah judul jendela xtermnya.

Saya ingin mengekstrak nama jendela xterm sebelum mengubahnya sehingga, setelah aksi jangka panjang selesai, saya dapat mengembalikan judul ke nilai sebelumnya.

Ini akan menjadi semacam kebalikan dari xtitle ... Apakah ini mungkin?

TheGeeko61
sumber
Pertanyaan terkait stackoverflow . Sepertinya xtermmemiliki tumpukan untuk judul jendela, jika Anda dapat mengetahui cara menggunakannya.
jw013

Jawaban:

4

Gunakan xtitleskrip.

Ada banyak varian di internet, namun, saya cenderung menggunakan yang tergantung pada xprop

http://www.shelldorado.com/scripts/cmds/xtitle

Nikhil Mulley
sumber
Luar biasa! Ini persis apa yang saya harapkan ... dan itu tidak hanya berfungsi untuk xterm tetapi (tidak seperti solusi lain) juga bekerja untuk gnome-terminal. Terima kasih!
TheGeeko61
Namun perlu dicatat bahwa mendapatkan judul melalui protokol X, yang xtitleartinya, hanya berfungsi untuk sesi lokal.
ak2
9

Ada urutan kontrol untuk menanyakan judul saat ini, tetapi biasanya dinonaktifkan karena alasan keamanan. Itu karena memungkinkan program jahat atau bahkan hanya file teks catted untuk menyisipkan urutan karakter sewenang-wenang seolah-olah diketik pada keyboard, dengan terlebih dahulu mengatur judul dan kemudian meminta agar itu dilaporkan kembali. Oleh karena itu tumpukan judul diperkenalkan sebagai gantinya.

Perintah berikut akan menyimpan judul jendela dan ikon saat ini di tumpukan:

echo -ne '\e[22t'

Ini akan mengatur judul menjadi my title:

echo -ne '\e]0;my title\007'

Dan ini akan mengembalikan judul jendela dan ikon sebelumnya:

echo -ne '\e[23t'
ak2
sumber
2

Untuk yang sepele, (dan mungkin kasus yang paling umum), di mana orang mungkin ingin menanyakan prompt untuk xterm saat ini, cukup gunakan xprop -id $WINDOWID WM_NAME. Jika Anda ingin mengekstrak nilai untuk manipulasi dalam skrip shell, Anda dapat melakukan sesuatu yang sedikit lebih mahal seperti:

   curtitle=`xprop -id $WINDOWID WM_NAME|awk '{print $3}'|xargs echo`

Menggunakan bash saja (untuk menghindari doa awk dan xargs):

   curtitle=`xprop -id $WINDOWID WM_NAME`
   curtitle=`eval echo ${x##*=}`

Xargs bergema di contoh pertama dan eval dalam contoh kedua ada di sana untuk menghilangkan tanda kutip yang xprop berikan di sekitar nilainya.

Ganti WM_NAME dengan WM_ICON jika Anda ingin mendapatkan nama ikon daripada string di bilah judul.

Keith Hanlan
sumber
-1

Jika saya memahami pertanyaan Anda dengan benar, Anda seharusnya bisa mendapatkan judul xterm saat ini dengan memeriksa $PROMPT_COMMANDvariabel, misalnya:

$ echo $PROMPT_COMMAND 
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

dan Anda dapat mengaturnya seperti (linebreak untuk keterbacaan):

PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]\
0;%s@%s%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

sumber
Ini PROMPT_COMMANDbukan cara yang paling otoritatif untuk mendapatkan judul karena tidak selalu ditetapkan, dan perintah apa pun yang Anda jalankan dapat mengubah judul di antara prompt. Untuk yang paling akurat, urutan kontrol khusus emulator terminal mungkin adalah cara yang harus dilakukan.
jw013
Ini tidak akan berfungsi untuk kasus di mana aplikasi lain menetapkan judul.
TheGeeko61
Ini $PROMPT_COMMANDbukan judul jendela. Mereka tidak berhubungan.
JamesThomasMoon1979