Comment puis-je mettre à jour automatiquement le titre dans un écran en cours d'exécution xterm?

14

C'est un peu un suivi de cette question . Je travaille dans tcsh dans l' écran GNU dans un xterm .

J'ai ce qui suit dans mon .cshrc:

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

Et cela fonctionne bien!

Cependant, lorsque je lance l'écran, je vois que le titre n'est pas mis à jour avec le répertoire actuel. Comment faire pour mettre à jour l'écran le titre xterm?

Nathan Fellman
la source
Avez-vous déjà trouvé une solution qui vous convient?
Trey Hunner
Non. J'ai essayé les réponses suggérées mais elles n'ont pas fonctionné. C'est pourquoi je ne les ai ni acceptés ni votés.
Nathan Fellman

Réponses:

4

Vous pouvez définir le titre de la fenêtre xterm en l'ajoutant à votre .tcshrcou .cshrc(remplacez votre precmdalias actuel ):

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

Assurez-vous qu'il s'agit du seul alias precmd dans vos fichiers .cshrcet .tcshrclorsque vous l'utilisez. Cette méthode affiche le répertoire actuel comme le titre de la fenêtre pour moi dans les deux xterm a gnome-terminal, qu'une session d'écran GNU soit ouverte ou non.

Ma réponse était basée sur cela .

Trey Hunner
la source
3

Je comprends que vous utilisez tcsh, donc cela ne fonctionnera probablement pas ... Juste au cas où quelqu'un chercherait le moyen bash de le faire.

Si vos systèmes (local / distant) exécutent bash, vous pouvez utiliser la variable d'environnement "PROMPT_COMMAND" pour définir le titre de la fenêtre. PROMPT_COMMAND est évalué avant qu'une invite ne s'affiche.

(dans votre .bashrc):

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

Explication:

'history -a'

Cela définit le shell à ajouter au fichier d'historique chaque fois qu'une commande est terminée, plutôt que lorsque le shell entier est terminé. (Ceci n'est pas lié à cet exemple).

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

Cela fait écho au code d'échappement "\ 033] 0;" qui définit le titre de la fenêtre avec les variables "user" @ "host" (en supprimant la correspondance la plus longue de droite à la première ".") puis le répertoire de travail (en remplaçant '~' par '$ HOME').

L'astuce ci-dessus fonctionnera avec toute application de terminal qui prend en charge le changement dynamique du titre de la fenêtre (ce que font iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm, etc.). Vous pouvez également consulter la variable shell "TITLEBAR" dans la documentation bash, elle est similaire.

wawawawa
la source
1
cela ne fonctionnera pas à l'intérieur de gnuscreen. au moins ça ne marche pas pour moi. c'est pourquoi je
suis
2

Cela devrait fonctionner dans n'importe quel shell, mais c'est un hack .screenrc sale. Il reprend la ligne de votre hardstatus pour fonctionner, ce qui peut être inacceptable pour certains utilisateurs. Mais cela fonctionne dans gnome-terminal sur le dernier Ubuntu, même sans la ligne termcapinfo ci-dessous. Certaines situations peuvent nécessiter des ajustements plus profonds (je n'ai pas testé sur PuTTY, par exemple).

# 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}]'

Trouvé sur ce lien .

Quack Quichotte
la source
2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"
SirDice
la source
1
Mais cela mettra-t-il à jour le titre lors de l'exécutionscreen
Nathan Fellman
1
Cela fonctionne très bien avec l'écran 4.00.02 + tcsh 6.12.00. Cela suppose que la hardstatusvariable d' écran soit correctement définie et que termcap / terminfo soit pris en charge hs|ts|fs|ds.
Darren Hall
que joue hardstatus ici?
gcb
2

Cette page (qui a été liée ci-dessus) est la solution, mais vous devez vous assurer que la chaîne de terminal de l'entrée s'aligne avec la chaîne d'identification de votre terminal (c'est-à-dire ce à quoi la variable TERM est définie) sinon elle n'aura aucun effet.

Voici un résumé de ce que j'ai fait, qui a fonctionné pour moi après des années à ne pas investir suffisamment de temps pour comprendre cela:

  1. Découvrez quelle est la chaîne d'ID de votre terminal en exécutant:

    echo $TERM
    

    Il dira probablement quelque chose comme «xterm» ou «linux» ou «rxvt».

  2. Ajoutez maintenant la ligne suivante à votre fichier .screenrc (ou créez-en un s'il n'existe pas) situé dans votre homedir (~ / .screenrc):

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

    La clé est de vous assurer que 'xterm' est la chaîne d'ID de votre TERM que vous avez obtenue ci-dessus. Vous pouvez créer plusieurs lignes pour chaque type de terme différent que vous utilisez.

Par exemple, je l'ai comme fichier .screenrc car j'utilise à la fois xterms et le type de terme 'linux' lorsque SShing dans une boîte:

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'

J'espère que cela aide et est totalement agnostique à la coquille. N'oubliez pas que si vous exécutez screen en tant que root, vous devrez modifier ~ root / .screenrc en plus de votre propre fichier ~ / .screenrc comme celui-ci.

Adam Strohl
la source
1

Les instructions ici m'ont permis de mettre à jour le titre dans rxvt de bash pour moi - ce qui n'est peut-être d'aucune aide mais j'ai pensé que cela valait la peine d'être étudié (section Barre d'état informative si le lien ne saute pas à la droite de la page)

Barry
la source