È possibile ottenere il nome corrente della finestra xterm?


9

Questo Howto LDP dimostra come modificare il titolo di un xterm.

So che anche questo è possibile usando il xtitlecomando.

Prima di invocare un'azione di lunga durata, il mio script utilizza tali tecniche per modificare il titolo della sua finestra xterm.

Vorrei estrarre il nome della finestra xterm prima di modificarlo in modo che, una volta completata l'azione di lunga durata, sia possibile ripristinare il titolo al valore precedente.

Sarebbe una specie di inverso a xtitle ... È anche possibile?


Domanda stackoverflow correlata . Sembra che xtermabbia uno stack per il titolo della finestra, se riesci a capire come usarlo.
jw013,

Risposte:


4

Usa lo xtitlescript.

Ci sono molte varianti su Internet, tuttavia, tendo a usarne una da cui dipende xprop

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


Eccellente! Questo è ESATTAMENTE quello che speravo ... e non funziona solo per xterm ma (a differenza di altre soluzioni) funziona anche per gnome-terminal. Grazie!
TheGeeko61

Si noti tuttavia che ottenere il titolo tramite il protocollo X, che è ciò che xtitlefunziona, funziona solo per le sessioni locali.
ak2

9

Esiste una sequenza di controllo per l'interrogazione del titolo corrente, ma di solito è disabilitata per motivi di sicurezza. Questo perché consente a un programma dannoso o anche solo a un file di testo catturato di inserire sequenze di caratteri arbitrari come se fosse digitato sulla tastiera, impostando prima il titolo e quindi chiedendo di riportarlo indietro. Quindi è stato introdotto lo stack del titolo.

Il seguente comando salverà i titoli delle finestre e delle icone correnti nello stack:

echo -ne '\e[22t'

Questo imposterà il titolo su my title:

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

E questo ripristinerà i titoli delle finestre e delle icone precedenti:

echo -ne '\e[23t'

2

Per il banale, (e probabilmente il caso più comune), in cui si potrebbe desiderare di interrogare il prompt per l'attuale xterm, usare semplicemente xprop -id $WINDOWID WM_NAME. Se vuoi estrarre il valore per la manipolazione in uno script di shell, puoi fare qualcosa di un po 'più costoso come:

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

Usando bash da solo (per evitare l'invocazione di awk e xargs):

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

Gli xarg risuonano nel primo esempio e l'eval nel secondo esempio è semplicemente lì per eliminare le virgolette che xprop mette attorno al valore.

Sostituisci WM_NAME con WM_ICON se desideri ottenere il nome dell'icona anziché la stringa nella barra del titolo.


-1

Se capisco bene la tua domanda, dovresti essere in grado di ottenere l'attuale titolo xterm controllando la $PROMPT_COMMANDvariabile, ad esempio:

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

e puoi impostarlo come (interruzione di riga per leggibilità):

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

Non PROMPT_COMMANDè il modo più autorevole per ottenere il titolo poiché non è sempre impostato e qualsiasi comando eseguito potrebbe modificare il titolo tra i prompt. Per la massima precisione, le sequenze di controllo specifiche dell'emulatore di terminale sono probabilmente la strada da percorrere.
jw013,

Ciò non funzionerebbe nei casi in cui altre app stanno impostando il titolo.
TheGeeko61

Non $PROMPT_COMMANDè il titolo della finestra. Non sono collegati.
JamesThomasMoon1979,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.