Wie kann ich den Titel in einem Xterm-Bildschirm automatisch aktualisieren?

11995
Nathan Fellman

Dies ist eine kleine Folge dieser Frage . Ich arbeite in tcsh in GNU screen in einem xterm .

Ich habe folgendes in meiner .cshrc:

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

Und das funktioniert gut!

Beim Ausführen von screen sehe ich jedoch, dass der Titel nicht mit dem aktuellen Verzeichnis aktualisiert wird. Wie kann ich den Xterm-Titel auf dem Bildschirm aktualisieren lassen?

14
Haben Sie schon eine Lösung gefunden, die für Sie funktioniert hat? Trey Hunner vor 14 Jahren 0
Ich habe die vorgeschlagenen Antworten ausprobiert, aber sie funktionierten nicht. Deshalb habe ich sie weder angenommen noch zugestimmt. Nathan Fellman vor 14 Jahren 0

6 Antworten auf die Frage

4
Trey Hunner

Sie können den Xterm-Fenstertitel festlegen, indem Sie dies Ihrem .tcshrcoder hinzufügen .cshrc(ersetzen Sie Ihren aktuellen precmdAlias):

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

Stellen Sie sicher, dass dies der einzige Precmd-Alias ​​in .cshrcund den .tcshrcDateien ist, wenn Sie dies verwenden. Diese Methode zeigt das aktuelle Verzeichnis als Fenstertitel für mich sowohl in einem Gnome-Terminal an, unabhängig davon, ob eine GNU-Bildschirmsitzung geöffnet ist.

Meine Antwort basierte darauf .

3
wawawawa

I understand you're using tcsh so this probably won't work... Just in case anyone is looking for the bash way to do this.

If your systems (local / remote) are running bash then you can use the "PROMPT_COMMAND" environment variable to set the window title. PROMPT_COMMAND is eval'd before a prompt is displayed.

(in your .bashrc):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;$@$:$\007'

Explanation:

'history -a'

This sets the shell to append to the history file every time a command is completed, rather than when the whole shell is completed. (This is not related to this example).

'echo -ne "\033]0;$@$:$\007"'

This echoes the escape code "\033]0;" which sets the window title with "user" @ "host" variables (removing longest match from right to first ".") and then the working directory (substituting '~' for '$HOME').

The above trick will work with any terminal application that supports dynamic changing of window title (which iTerm, Terminal.app, urxvt, aterm, eTerm. xterm etc all do). You can also look into the shell variable "TITLEBAR" in the bash documentation, it is similar.

Dies funktioniert nicht, wenn Sie sich in Gnuscreen befinden. Zumindest funktioniert es nicht für mich. darum bin ich hier :) gcb vor 10 Jahren 1
Hilft das? http://aperiodic.net/screen/faq#how_can_screen_use_xterm_s_title_bar wawawawa vor 10 Jahren 0
2
quack quixote

Dies sollte in jeder Shell funktionieren, aber es ist ein schmutziger .screenrc-Hack. Die Funktion "hardstatus" übernimmt die Funktion, die für manche Benutzer möglicherweise nicht akzeptabel ist. Aber es funktioniert in gnome-terminal auf dem neuesten Ubuntu, auch ohne die Termcapinfo- Zeile unten. In einigen Situationen können tiefere Anpassungen erforderlich sein (zum Beispiel habe ich noch nicht PuTTY getestet).

# 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}[%%H%][%= %{= kw}%?%-Lw%?%(%%n*%f%t%?(%u)%?%)%%?%+Lw%?%?%= %][%%C%a %M.%d%]' 

Gefunden bei diesem Link .

2
SirDice
setenv TITLE "%{\033]0;%n@%m:%~\007%}" set prompt = "$%n@%m:%~%#" 
Wird der Titel jedoch aktualisiert, wenn `screen` ausgeführt wird? Nathan Fellman vor 13 Jahren 1
Dies funktioniert gut mit dem Bildschirm 4.00.02 + tcsh 6.12.00. Dies setzt voraus, dass Sie die Bildschirmvariable "hardstatus" entsprechend eingestellt haben, und termcap / terminfo unterstützt "hs | ts | fs | ds". Darren Hall vor 12 Jahren 1
was spielt hardstatus hier? gcb vor 10 Jahren 0
2
Adam Strohl

Diese Seite (die oben verlinkt wurde) ist die Lösung. Sie müssen jedoch sicherstellen, dass die Terminal-Zeichenfolge des Eintrags mit der ID-Zeichenfolge Ihres Terminals übereinstimmt (dh, worauf die Variable TERM eingestellt ist), andernfalls hat sie keine Auswirkungen.

Hier eine Zusammenfassung von dem, was ich getan habe, was nach Jahren, in denen ich nicht genug Zeit investiert habe, um dies herauszufinden, für mich funktioniert hat:

  1. Finden Sie heraus, was die ID-Zeichenfolge Ihres Terminals ist, indem Sie Folgendes ausführen:

    echo $TERM 

    Es wird wahrscheinlich etwas wie 'xterm' oder 'linux' oder 'rxvt' sagen.

  2. Fügen Sie nun die folgende Zeile zu Ihrer .screenrc-Datei hinzu (oder machen Sie eine, falls noch nicht vorhanden) in Ihrem Homedir (~ / .screenrc):

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

    Der Schlüssel ist, um sicherzustellen, dass "xterm" die ID-Zeichenfolge Ihres TERM ist, die Sie oben angegeben haben. Sie können für jeden verwendeten Begriffstyp mehrere Zeilen ausführen.

Zum Beispiel habe ich dies als meine .screenrc-Datei, weil ich sowohl xterms als auch den Begriffstyp 'linux' verwende, wenn ich in eine Box gehe:

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' 

Hoffentlich hilft das und ist völlig unrealistisch. Denken Sie daran, wenn Sie screen als root ausführen, müssen Sie ~ root / .screenrc zusätzlich zu Ihrer eigenen ~ / .screenrc-Datei wie dieser ändern.

1
Barry

Die Anweisungen hier erlaubten mir, den Titel in rxvt von bash für mich zu aktualisieren - was keine Vorsichtsmaßnahmen ist, aber ich dachte, es wäre vielleicht eine Untersuchung wert (Abschnitt Informative Statusleiste, wenn der Link nicht zum rechten Teil der Seite springt).