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

14

Dies ist eine Art Folgemaßnahme zu dieser Frage . Ich arbeite in tcsh im GNU- Bildschirm 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!

Wenn ich den Bildschirm ausführe, wird der Titel jedoch nicht mit dem aktuellen Verzeichnis aktualisiert. Wie kann ich den xterm-Titel auf dem Bildschirm aktualisieren lassen?

Nathan Fellman
quelle
Haben Sie schon eine Lösung gefunden, die für Sie funktioniert?
Trey Hunner
Ich habe die vorgeschlagenen Antworten ausprobiert, aber sie haben nicht funktioniert. Deshalb habe ich sie weder akzeptiert noch hochgestuft.
Nathan Fellman

Antworten:

4

Sie können den Titel des xterm-Fensters festlegen, indem Sie dies zu Ihrem .tcshrcoder hinzufügen .cshrc(ersetzen Sie Ihren aktuellen precmdAlias):

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

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

Meine Antwort basierte darauf .

Trey Hunner
quelle
3

Ich verstehe, dass Sie tcsh verwenden, so dass dies wahrscheinlich nicht funktioniert ... Nur für den Fall, dass jemand nach dem bash-Weg sucht, um dies zu tun.

Wenn auf Ihren Systemen (lokal / remote) bash ausgeführt wird, können Sie den Fenstertitel mit der Umgebungsvariablen "PROMPT_COMMAND" festlegen. PROMPT_COMMAND wird evaluiert, bevor eine Eingabeaufforderung angezeigt wird.

(in Ihrem .bashrc):

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

Erläuterung:

'history -a'

Dadurch wird die Shell so eingestellt, dass sie bei jedem Abschluss eines Befehls an die Verlaufsdatei angehängt wird, anstatt wenn die gesamte Shell abgeschlossen ist. (Dies bezieht sich nicht auf dieses Beispiel).

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

Dies gibt den Escape-Code "\ 033] 0;" Hiermit wird der Fenstertitel mit den Variablen "user" @ "host" (Entfernen der längsten Übereinstimmung von rechts nach zuerst ".") und dann mit dem Arbeitsverzeichnis (Ersetzen von "$ HOME" durch "~") festgelegt.

Der obige Trick funktioniert mit jeder Terminal-Anwendung, die das dynamische Ändern des Fenstertitels unterstützt (was iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm usw. alle tun). Sie können auch in die Shell-Variable "TITLEBAR" in der Bash-Dokumentation schauen, es ist ähnlich.

Wawawawa
quelle
1
Dies funktioniert nicht, wenn Sie sich im Gnuscreen befinden. Zumindest funktioniert es bei mir nicht. Deshalb bin ich hier :)
gcb
2

Dies sollte in jeder Shell funktionieren, aber es ist ein schmutziger .screenrc-Hack. Es übernimmt die Leitung Ihres Hardstatus, um zu funktionieren, was für einige Benutzer nicht akzeptabel sein kann. Aber es funktioniert im Gnome-Terminal auf dem neuesten Ubuntu, auch ohne die Termcapinfo- Zeile unten. In einigen Situationen sind möglicherweise tiefere Optimierungen erforderlich (ich habe beispielsweise PuTTY nicht 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}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Gefunden unter diesem Link .

Quacksalber
quelle
2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"
SirDice
quelle
1
Aber wird dies den Titel beim Laufen aktualisierenscreen
Nathan Fellman
1
Dies funktioniert gut mit Bildschirm 4.00.02 + tcsh 6.12.00. Dies setzt voraus, dass Sie die Bildschirmvariable hardstatusentsprechend eingestellt haben und termcap / terminfo unterstützt hs|ts|fs|ds.
Darren Hall
was spielt hardstatus hier?
GCB
2

Diese Seite (die oben verlinkt wurde) ist die Lösung. Sie müssen jedoch sicherstellen, dass die Terminalzeichenfolge des Eintrags mit der ID-Zeichenfolge Ihres Terminals übereinstimmt (dh auf welche Variable TERM eingestellt ist), da sie sonst keine Auswirkung hat.

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

  1. Ermitteln Sie die ID-Zeichenfolge Ihres Terminals, indem Sie Folgendes ausführen:

    echo $TERM
    

    Es wird wahrscheinlich so etwas wie "xterm" oder "linux" oder "rxvt" sagen.

  2. Fügen Sie nun die folgende Zeile zu Ihrer .screenrc-Datei hinzu (oder fügen Sie eine hinzu, wenn sie nicht vorhanden ist), die sich in Ihrem Homedir (~ / .screenrc) befindet:

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

    Der Schlüssel besteht darin, sicherzustellen, dass 'xterm' die oben angegebene ID-Zeichenfolge Ihres BEGRIFFS ist. Sie können für jeden verwendeten Begriffstyp mehrere Zeilen erstellen.

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

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 Shell-Agnostiker. 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.

Adam Strohl
quelle
1

Die Anweisungen hier erlaubten es mir, den Titel in rxvt von bash für mich zu aktualisieren - was zwar keine Hilfe ist, aber ich dachte, dass es sich lohnen könnte, dies zu untersuchen (Abschnitt Informative Statusleiste, wenn der Link nicht zum rechten Teil der Seite springt).

Barry
quelle