¿Es posible obtener el nombre actual de la ventana xterm?

9

Este LDP Howto demuestra cómo cambiar el título de una xterm.

Sé que esto también es posible usando el xtitlecomando.

Antes de invocar una acción de larga duración, mi script usa tales técnicas para cambiar el título de su ventana xterm.

Me gustaría extraer el nombre de la ventana xterm antes de cambiarla para que, una vez que se complete la acción de larga duración, pueda restaurar el título a su valor anterior.

Sería una especie de inverso a xtitle ... ¿Es esto posible?

TheGeeko61
fuente
Pregunta relacionada de stackoverflow . Parece que xtermtiene una pila para el título de la ventana, si puede descubrir cómo usarlo.
jw013

Respuestas:

4

Usar xtitleguión.

Hay muchas variantes en internet, sin embargo, tiendo a usar una que depende de xprop

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

Nikhil Mulley
fuente
¡Excelente! Esto es EXACTAMENTE lo que esperaba ... y no solo funciona para xterm sino que (a diferencia de otras soluciones) también funciona para gnome-terminal. ¡Gracias!
TheGeeko61
Sin embargo, tenga en cuenta que obtener el título a través del protocolo X, que es lo que xtitlehace, solo funciona para sesiones locales.
ak2
9

Hay una secuencia de control para consultar el título actual, pero generalmente está deshabilitado por razones de seguridad. Esto se debe a que permite que un programa malicioso o incluso solo un archivo de texto insertado inserte secuencias de caracteres arbitrarias como si estuvieran escritas en el teclado, primero configurando el título y luego solicitando que se le informe de nuevo. Por lo tanto, se introdujo la pila de títulos.

El siguiente comando guardará la ventana actual y los títulos de los íconos en la pila:

echo -ne '\e[22t'

Esto establecerá el título en my title:

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

Y esto restaurará la ventana anterior y los títulos de íconos:

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

Para el trivial, (y probablemente el caso más común), donde uno podría desear consultar el prompt para el xterm actual, simplemente use xprop -id $WINDOWID WM_NAME. Si desea extraer el valor para la manipulación en un script de shell, puede hacer algo un poco más costoso como:

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

Usando bash solo (para evitar la invocación de awk y xargs):

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

Los xargs hacen eco en el primer ejemplo y la evaluación en el segundo ejemplo simplemente está ahí para quitar las comillas que xprop pone alrededor del valor.

Reemplace WM_NAME con WM_ICON si desea obtener el nombre del icono en lugar de la cadena en la barra de título.

Keith Hanlan
fuente
-1

Si entiendo bien su pregunta, debería poder obtener el título actual de xterm inspeccionando la $PROMPT_COMMANDvariable, por ejemplo:

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

y puedes configurarlo como (salto de línea para facilitar la lectura):

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

fuente
Esta PROMPT_COMMANDno es la forma más autorizada para obtener el título, ya que no siempre se establece, y cualquier comando que ejecute podría cambiar el título entre las solicitudes. Para mayor precisión, las secuencias de control específicas del emulador de terminal son probablemente el camino a seguir.
jw013
Esto no funcionaría para los casos en que otras aplicaciones están configurando el título.
TheGeeko61
El $PROMPT_COMMANDno es el título de la ventana. No están relacionados.
JamesThomasMoon1979