Est-il possible d'obtenir le nom actuel de la fenêtre xterm?

9

Ce LDP Howto montre comment changer le titre d'un xterm.

Je sais que cela est également possible en utilisant la xtitlecommande.

Avant d'invoquer une action de longue durée, mon script utilise de telles techniques pour changer le titre de sa fenêtre xterm.

Je voudrais extraire le nom de la fenêtre xterm avant de la changer afin que, une fois l'action longue terminée, je puisse restaurer le titre à sa valeur précédente.

Ce serait en quelque sorte l'inverse de xtitle ... Est-ce même possible?

TheGeeko61
la source
Question de stackoverflow associée . Il semble xtermavoir une pile pour le titre de la fenêtre, si vous pouvez comprendre comment l'utiliser.
jw013

Réponses:

4

Utilisez un xtitlescript.

Il existe de nombreuses variantes sur Internet, cependant, j'ai tendance à en utiliser une qui dépend de xprop

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

Nikhil Mulley
la source
Excellent! C'est exactement ce que j'espérais ... et cela fonctionne non seulement pour xterm mais (contrairement à d'autres solutions) fonctionne également pour gnome-terminal. Merci!
TheGeeko61
Notez cependant que l'obtention du titre via le protocole X, ce qui xtitlefonctionne, ne fonctionne que pour les sessions locales.
ak2
9

Il existe une séquence de contrôle pour interroger le titre actuel, mais elle est généralement désactivée pour des raisons de sécurité. En effet, il permet à un programme malveillant ou même simplement à un fichier texte enchaîné d'insérer des séquences de caractères arbitraires comme s'il était tapé sur le clavier, en définissant d'abord le titre, puis en demandant qu'il soit renvoyé. Par conséquent, la pile de titres a été introduite à la place.

La commande suivante enregistre les titres des fenêtres et des icônes actuelles dans la pile:

echo -ne '\e[22t'

Cela définira le titre sur my title:

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

Et cela restaurera les titres des fenêtres et des icônes précédents:

echo -ne '\e[23t'
ak2
la source
2

Pour le trivial, (et probablement le cas le plus courant), où l'on peut souhaiter interroger l'invite pour le xterm actuel, utilisez simplement xprop -id $WINDOWID WM_NAME. Si vous voulez extraire la valeur de manipulation dans un script shell, vous pouvez faire quelque chose d'un peu plus cher comme:

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

Utiliser bash seul (pour éviter l'invocation de awk et xargs):

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

L'écho xargs dans le premier exemple et l'eval dans le second exemple sont simplement là pour supprimer les guillemets que xprop met autour de la valeur.

Remplacez WM_NAME par WM_ICON si vous souhaitez obtenir le nom de l'icône plutôt que la chaîne dans la barre de titre.

Keith Hanlan
la source
-1

Si je comprends bien votre question, vous devriez pouvoir obtenir le titre xterm actuel en inspectant la $PROMPT_COMMANDvariable, par exemple:

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

et vous pouvez le définir comme (saut de ligne pour la lisibilité):

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

la source
Ce PROMPT_COMMANDn'est pas le moyen le plus fiable pour obtenir le titre car il n'est pas toujours défini, et toute commande que vous exécutez peut changer le titre entre les invites. Pour la plus grande précision, les séquences de contrôle spécifiques à l'émulateur de terminal sont probablement la voie à suivre.
jw013
Cela ne fonctionnerait pas dans les cas où d'autres applications définissent le titre.
TheGeeko61
Ce $PROMPT_COMMANDn'est pas le titre de la fenêtre. Ils ne sont pas liés.
JamesThomasMoon1979