Ist es möglich, den aktuellen Namen des xterm-Fensters zu erhalten?

9

Dieses LDP-Howto zeigt, wie Sie den Titel eines xterm ändern.

Ich weiß, dass dies auch mit dem xtitleBefehl möglich ist.

Bevor ich eine Aktion mit langer Laufzeit aufrufe, verwendet mein Skript solche Techniken, um den Titel seines xterm-Fensters zu ändern.

Ich möchte den Namen des xterm-Fensters extrahieren, bevor ich es ändere, damit ich nach Abschluss der lang laufenden Aktion den Titel auf den vorherigen Wert zurücksetzen kann.

Es wäre eine Art Umkehrung zu xtitle ... Ist das überhaupt möglich?

TheGeeko61
quelle
Verwandte Stackoverflow-Frage . Es sieht so aus, als hätte xtermes einen Stapel für den Fenstertitel, wenn Sie herausfinden können, wie man ihn verwendet.
jw013

Antworten:

4

Verwenden Sie ein xtitleSkript.

Es gibt viele Varianten im Internet, aber ich neige dazu, eine zu verwenden, die davon abhängt xprop

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

Nikhil Mulley
quelle
Ausgezeichnet! Dies ist genau das, was ich mir erhofft hatte ... und es funktioniert nicht nur für xterm, sondern (im Gegensatz zu anderen Lösungen) auch für gnome-terminal. Vielen Dank!
TheGeeko61
Beachten Sie jedoch, dass das Abrufen des Titels über das X-Protokoll xtitlenur für lokale Sitzungen funktioniert.
Ak2
9

Es gibt eine Kontrollsequenz zum Abfragen des aktuellen Titels, die jedoch aus Sicherheitsgründen normalerweise deaktiviert ist. Dies liegt daran, dass ein Schadprogramm oder sogar nur eine cattierte Textdatei beliebige Zeichenfolgen einfügen kann, als ob sie auf der Tastatur eingegeben würden, indem zuerst der Titel festgelegt und dann die Rückmeldung angefordert wird. Daher wurde stattdessen der Titelstapel eingeführt.

Mit dem folgenden Befehl werden die aktuellen Fenster- und Symboltitel auf dem Stapel gespeichert:

echo -ne '\e[22t'

Dadurch wird der Titel auf Folgendes gesetzt my title:

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

Dadurch werden die vorherigen Fenster- und Symboltitel wiederhergestellt:

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

Für den trivialen (und wahrscheinlich häufigsten) Fall, in dem die Eingabeaufforderung nach dem aktuellen xterm abgefragt werden soll, verwenden Sie einfach xprop -id $WINDOWID WM_NAME. Wenn Sie den Wert für die Manipulation in einem Shell-Skript extrahieren möchten, können Sie etwas teureres ausführen, z.

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

Verwenden Sie bash alleine (um den Aufruf von awk und xargs zu vermeiden):

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

Das xargs-Echo im ersten Beispiel und das eval im zweiten Beispiel dienen lediglich dazu, die Anführungszeichen zu entfernen, die xprop um den Wert setzt.

Ersetzen Sie WM_NAME durch WM_ICON, wenn Sie den Symbolnamen anstelle der Zeichenfolge in der Titelleiste erhalten möchten.

Keith Hanlan
quelle
-1

Wenn ich Ihre Frage richtig verstehe, sollten Sie in der Lage sein, den aktuellen xterm-Titel zu erhalten, indem Sie die $PROMPT_COMMANDVariable untersuchen, z.

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

und Sie können es wie folgt einstellen (Zeilenumbruch zur besseren Lesbarkeit):

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

quelle
Dies PROMPT_COMMANDist nicht die maßgeblichste Methode, um den Titel abzurufen, da er nicht immer festgelegt ist und jeder von Ihnen ausgeführte Befehl den Titel zwischen den Eingabeaufforderungen ändern kann. Für die höchste Genauigkeit sind wahrscheinlich Terminalemulator-spezifische Steuersequenzen der richtige Weg.
jw013
Dies funktioniert nicht in Fällen, in denen andere Apps den Titel festlegen.
TheGeeko61
Das $PROMPT_COMMANDist nicht der Fenstertitel. Sie haben nichts miteinander zu tun.
JamesThomasMoon1979