Hängt davon ab, wie die Dinge eingerichtet sind, aber standardmäßig sollte so etwas funktionieren.
settitle() {
printf "\033k$1\033\\"
}
Dann renne:
settitle NEWTITLE
.
Weitere Informationen finden Sie in den Bildschirmtitel-Dokumenten und in den GNU-Bildschirm-FAQ .
Wenn Ctrl+ A Aes nur bis zum nächsten Befehl ändert, wird es wahrscheinlich durch $PS1
(alle Shells) oder $PROMPT_COMMAND
/ DEBUG trap
(nur Bash) oder precmd
/ preexec
(nur zsh) gesetzt.
Sie sollten für jeden Ort suchen , dass \e
oder \033
erscheint mit k
oder \\
nach ihm, im Grunde wie mein settitle
Beispiel oben.
AKTUALISIEREN
Sie sagten, Sie hätten einen Brauch preexec
.
Warum ändern Sie es nicht so:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
Anschließend können Sie einen benutzerdefinierten Titel festlegen, indem Sie Folgendes ausführen:
TITLE="my title"
und deaktivieren Sie den Titel durch Ausführen
TITLE=
Vergessen Sie nicht, sich zu ändern precmd
und $PS1
bei Bedarf auch.
BEISEITE
Man könnte sogar diese an alle Endgeräte erweitern (zB xterm
, gnome-terminal
usw.) durch nicht schwer die Codierung \ek
und \e\\
.
So mache ich es:
terminit()
{
# determine the window title escape sequences
case "$TERM" in
aixterm|dtterm|putty|rxvt|xterm*)
titlestart='\033]0;'
titlefinish='\007'
;;
cygwin)
titlestart='\033];'
titlefinish='\007'
;;
konsole)
titlestart='\033]30;'
titlefinish='\007'
;;
screen*)
# status line
#titlestart='\033_'
#titlefinish='\033\'
# window title
titlestart='\033k'
titlefinish='\033\'
;;
*)
if type tput >/dev/null 2>&1
then
if tput longname >/dev/null 2>&1
then
titlestart="$(tput tsl)"
titlefinish="$(tput fsl)"
fi
else
titlestart=''
titlefinish=''
fi
;;
esac
}
# or put it inside a case $- in *i* guard
if test -t 0; then
terminit
fi
# set the xterm/screen/etc. title
settitle()
{
test -z "${titlestart}" && return 0
printf "${titlestart}$*${titlefinish}"
}
Dann können Sie Ihre ändern preexec
zu:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
. Und was die Eingabeaufforderung betrifft, meinst du, ich muss ändern,$PS1
wann immer ich möchte, dass sich der Titel nicht ändert?\e
oder\033
.Wenn Ihr Fenstertitel die aktuell im Fenster ausgeführte Anwendung widerspiegelt, liegt dies daran, dass Ihre Shell dies tut. Wenn dies der Fall ist, liegt dies daran, dass Ihre Distribution, Ihr Systemadministrator oder Sie es konfiguriert haben.
Wenn der Befehl während der Ausführung des Befehls als Fenstertitel angezeigt wird, erfolgt dies über die
preexec
Funktion (in zsh) oder eine Emulation davon unter bash .Wenn sich der Titel nach Abschluss jedes Befehls ändert, erfolgt dies durch die
precmd
Funktion in zsh, denPROMPT_COMMAND
Parameter in bash oder als Teil der Eingabeaufforderung (PS1
Parameter) in einer beliebigen Shell. (Der Befehl zum Ändern des Titels ist eine Escape-Sequenz, die von einer beliebigen Anwendung als Teil des Ausgabestreams des Terminals ausgegeben wird, sodass sie in eine Eingabeaufforderung eingebettet werden kann.)Geben Sie für eine Escape - Sequenz wie
\e]0;new title\a
,\e]2;new title\a
oder\eknew title\e\\
in der Shell - Initialisierungsdatei (~/.bashrc
,~/.zshrc
, ...). Wenn es nichts relevant ist, kann die Einstellung in einer Systemdatei (zB/etc/bash.bashrc
,/etc/zsh/zshrc
); Überschreiben Sie dann diesen Parameter oder diese Funktion in Ihrer eigenen Initialisierungsdatei.Siehe Mikels Antwort für eine überschreibbare Titeleinstellung in
preexec
.quelle
preexec
in meiner .zshrc definierte Funktion gefunden. Die Sache ist, das ist das Verhalten, das ich will ... die meiste Zeit. Ich möchte es auf einem bestimmten Bildschirm im laufenden Betrieb deaktivieren können. Es gibt vielleicht eine Variable, die ich in derpreexec
Funktion erhalten kann, wenn ich den Titel manuell einstelle, oder so etwas?preexec
Funktion veröffentlichen, kann ich oder jemand anderes wahrscheinlich eine einfache Änderung vorschlagen.preexec
, aber Greg sagte nicht, dass er es benutztezsh
. Das wird mich lehren. ;-)preexec
Design ist besser als meine.