¿Cómo puedo actualizar automáticamente el título en una pantalla de ejecución de xterm?

¿Cómo puedo actualizar automáticamente el título en una pantalla de ejecución de xterm?

Esto es un pequeño seguimiento deesta pregunta. estoy trabajando entcshdentro de GNUpantallaen unxterm.

Tengo lo siguiente en mi .cshrc:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

¡Y esto funciona bien!

Sin embargo, cuando ejecuto la pantalla veo que el título no se actualiza con el directorio actual. ¿Cómo puedo hacer que la pantalla actualice el título de xterm?

Respuesta1

Puede configurar el título de la ventana xterm agregando esto a su .tcshrco .cshrc(reemplace su alias actual precmd):

alias precmd 'echo -n "\033]0;${PWD}\a"'

Asegúrese de que este sea el único alias de precmd en sus archivos .cshrcy .tcshrccuando utilice esto. Este método muestra el directorio actual como título de la ventana tanto en xterm como en gnome-terminal, independientemente de si hay una sesión de pantalla GNU abierta.

Mi respuesta se basó eneste.

Respuesta2

Esto debería funcionar en cualquier shell, pero es un truco sucio de .screenrc. Se hace cargo de la línea hardstatus para funcionar, lo que puede resultar inaceptable para algunos usuarios. Pero funciona enterminal-gnomeen la última versión de Ubuntu, incluso sin eltermcapinfolínea de abajo. Algunas situaciones pueden requerir ajustes más profundos (no he probado en PuTTY, por ejemplo).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Encontrado eneste enlace.

Respuesta3

Entiendo que estás usando tcsh, por lo que probablemente esto no funcione... En caso de que alguien esté buscando la forma bash de hacer esto.

Si sus sistemas (local/remoto) ejecutan bash, puede usar la variable de entorno "PROMPT_COMMAND" para configurar el título de la ventana. PROMPT_COMMAND se evalúa antes de que se muestre un mensaje.

(en tu .bashrc):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Explicación:

'history -a'

Esto configura el shell para que se agregue al archivo histórico cada vez que se completa un comando, en lugar de cuando se completa todo el shell. (Esto no está relacionado con este ejemplo).

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Esto hace eco del código de escape "\033]0;" que establece el título de la ventana con las variables "usuario" @ "host" (eliminando la coincidencia más larga de derecha al primer ".") y luego el directorio de trabajo (sustituyendo '~' por '$HOME').

El truco anterior funcionará con cualquier aplicación de terminal que admita el cambio dinámico del título de la ventana (lo cual hacen iTerm, Terminal.app, urxvt, aterm, eTerm. xterm, etc.). También puede consultar la variable de shell "TITLEBAR" en la documentación de bash, es similar.

Respuesta4

Esta página(que ha sido vinculado anteriormente) es la solución, sin embargodebe asegurarse de que la cadena del terminal de la entrada esté alineada con la cadena de identificación de su terminal(es decir, cuál es el valor establecido para la variable TERM); de lo contrario, no tendrá ningún efecto.

Aquí un resumen de lo que hice, que funcionó para mí después de años de no invertir suficiente tiempo para resolver esto:

  1. Descubra cuál es la cadena de identificación de su terminal ejecutando:

    echo $TERM
    

    Probablemente dirá algo como "xterm" o "linux" o "rxvt".

  2. Ahora agregue la siguiente línea a su archivo .screenrc (o cree uno si no existe) ubicado en su directorio de inicio (~/.screenrc):

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    La clave es asegurarse de que 'xterm' sea la cadena de identificación de su TERM que obtuvo arriba. Puede hacer varias líneas para cada tipo de término diferente que utilice.

Por ejemplo, tengo esto como mi archivo .screenrc porque uso tanto xterms como el tipo de término 'linux' cuando hago SSh en un cuadro:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

Esperemos que esto ayude y sea totalmente independiente de Shell. Recuerde que si ejecuta screen como root, deberá modificar ~root/.screenrc además de su propio archivo ~/.screenrc como este.

información relacionada