
Dies ist eine kleine Fortsetzung vondiese FrageIch arbeite intcshinnerhalb von GNUBildschirmin einem (nxterm.
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 jedoch screen ausführe, sehe ich, dass der Titel nicht mit dem aktuellen Verzeichnis aktualisiert wird. Wie kann ich screen dazu bringen, den Xterm-Titel zu aktualisieren?
Antwort1
Sie können den Titel des XTerm-Fensters festlegen, indem Sie dies zu Ihrem .tcshrc
„oder“ hinzufügen .cshrc
(ersetzen Sie Ihren aktuellen precmd
Alias):
alias precmd 'echo -n "\033]0;${PWD}\a"'
Stellen Sie sicher, dass dies der einzige Precmd-Alias in Ihren .cshrc
und .tcshrc
Dateien ist, wenn Sie dies verwenden. Diese Methode zeigt mir das aktuelle Verzeichnis als Fenstertitel sowohl in xterm als auch in einem Gnome-Terminal an, unabhängig davon, ob eine GNU-Bildschirmsitzung geöffnet ist.
Meine Antwort basierte aufDas.
Antwort2
Dies sollte in jeder Shell funktionieren, ist aber ein schmutziger .screenrc-Hack. Es übernimmt die Zeile your hardstatus, um zu funktionieren, was für manche Benutzer möglicherweise nicht akzeptabel ist. Aber es funktioniert inGnome-Terminalauf dem neuesten Ubuntu, auch ohne diebegriffsinfoZeile unten. In manchen Situationen sind möglicherweise tiefere Anpassungen erforderlich (ich habe es beispielsweise nicht mit 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}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'
Gefunden amdieser Link.
Antwort3
Ich verstehe, dass Sie tcsh verwenden, also wird das wahrscheinlich nicht funktionieren ... Nur für den Fall, dass jemand nach der Bash-Methode dafür sucht.
Wenn auf Ihren Systemen (lokal / remote) Bash ausgeführt wird, können Sie die Umgebungsvariable „PROMPT_COMMAND“ verwenden, um den Fenstertitel festzulegen. PROMPT_COMMAND wird ausgewertet, bevor eine Eingabeaufforderung angezeigt wird.
(in Ihrer .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 bei jedem Abschluss eines Befehls Daten an die Verlaufsdatei angehängt werden, und nicht immer, wenn die gesamte Shell abgeschlossen ist. (Dies hat nichts mit diesem Beispiel zu tun.)
'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
Dies gibt den Escape-Code „\033]0;“ wieder, der den Fenstertitel mit den Variablen „Benutzer“ @ „Host“ festlegt (wobei die längste Übereinstimmung von rechts bis zum ersten „.“ entfernt wird) und dann das Arbeitsverzeichnis (wobei „~“ durch „$HOME“ ersetzt wird).
Der obige Trick funktioniert mit jeder Terminalanwendung, die die dynamische Änderung des Fenstertitels unterstützt (was bei iTerm, Terminal.app, urxvt, aterm, eTerm, xterm usw. der Fall ist). Sie können auch in der Bash-Dokumentation nach der Shell-Variable „TITLEBAR“ suchen, sie ist ähnlich.
Antwort4
Diese Seite(das oben verlinkt wurde) ist jedoch die LösungSie müssen sicherstellen, dass die Terminalzeichenfolge des Eintrags mit der ID-Zeichenfolge Ihres Terminals übereinstimmt(d. h. worauf die Variable TERM eingestellt ist), andernfalls hat es keine Wirkung.
Hier eine Zusammenfassung meiner Vorgehensweise, die für mich funktioniert hat, nachdem ich jahrelang nicht genug Zeit investiert hatte, um dies herauszufinden:
Ermitteln Sie die ID-Zeichenfolge Ihres Terminals, indem Sie Folgendes ausführen:
echo $TERM
Wahrscheinlich wird dort etwas wie „xterm“ oder „linux“ oder „rxvt“ stehen.
Fügen Sie nun die folgende Zeile zu Ihrer .screenrc-Datei in Ihrem Home-Verzeichnis (~/.screenrc) hinzu (oder erstellen Sie eine, falls sie noch nicht existiert):
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
Der Schlüssel besteht darin, sicherzustellen, dass „xterm“ die ID-Zeichenfolge Ihres TERM ist, die Sie oben erhalten haben. Sie können mehrere Zeilen für jeden verwendeten Termtyp verwenden.
Beispielsweise habe ich dies als meine .screenrc-Datei, weil ich beim SShen in eine Box sowohl xterms als auch den Termtyp „Linux“ verwende:
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-unabhängig. Denken Sie daran, dass Sie, wenn Sie screen als Root ausführen, zusätzlich zu Ihrer eigenen Datei ~/.screenrc auch ~root/.screenrc wie folgt ändern müssen.