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

14

Esto es un poco un seguimiento de esta pregunta . Estoy trabajando en tcsh dentro de la pantalla GNU en un xterm .

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?

Nathan Fellman
fuente
¿Ya ha encontrado una solución que funcionó para usted?
Trey Hunner
No. Intenté las respuestas sugeridas pero no funcionaron. Es por eso que no los acepté ni los voté.
Nathan Fellman

Respuestas:

4

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

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

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

Mi respuesta se basó en esto .

Trey Hunner
fuente
3

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

Si sus sistemas (local / remoto) están ejecutando bash, puede usar la variable de entorno "PROMPT_COMMAND" para establecer el título de la ventana. PROMPT_COMMAND se evalúa antes de que se muestre una solicitud.

(en tu .bashrc):

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

Explicación:

'history -a'

Esto establece que el shell se agregue al archivo de historial 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 la derecha a la primera ".") 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 (que iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm, etc.). También puede buscar en la variable de shell "TITLEBAR" en la documentación de bash, es similar.

wawawawa
fuente
1
esto no funcionará dentro de gnuscreen. Al menos no funciona para mí. por eso estoy aquí :)
gcb
2

Esto debería funcionar en cualquier shell, pero es un hack sucio .screenrc. Asume el control de la línea hardstatus para que funcione, lo que puede ser inaceptable para algunos usuarios. Pero funciona en gnome-terminal en el último Ubuntu, incluso sin la línea termcapinfo a continuación. Algunas situaciones pueden requerir ajustes más profundos (por ejemplo, no he probado en PuTTY).

# 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 en este enlace .

quijote curandero
fuente
2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"
SirDice
fuente
1
¿Pero esto actualizará el título cuando se ejecute?screen
Nathan Fellman
1
Esto funciona bien con la pantalla 4.00.02 + tcsh 6.12.00. Esto supone que tiene la hardstatusvariable de pantalla configurada adecuadamente y que admite termcap / terminfo hs|ts|fs|ds.
Darren Hall
¿Qué juega aquí hardstatus?
gcb
2

Esta página (que se ha vinculado anteriormente) es la solución, sin embargo , debe asegurarse de que la cadena de terminal de la entrada se alinee con la cadena de identificación de su terminal (es decir, en qué está configurada 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. Averigüe 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 homedir (~ / .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 ID 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 utilizo xterms y el tipo de término 'linux' cuando hago SShing 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 la cáscara. Recuerde que si ejecuta screen como root necesitaría modificar ~ root / .screenrc además de su propio archivo ~ / .screenrc como este.

Adam Strohl
fuente
1

Las instrucciones aquí me permitieron actualizar el título en rxvt de bash para mí, lo que tal vez no sea de ninguna ayuda, pero pensé que podría valer la pena investigarlo (sección Barra de estado informativa si el enlace no salta a la parte derecha de la página)

Barry
fuente