Zależy od tego, jak rzeczy są skonfigurowane, ale domyślnie coś takiego powinno działać.
settitle() {
printf "\033k$1\033\\"
}
Następnie uruchomić:
settitle NEWTITLE
.
Zobacz dokumentację tytułów ekranów i często zadawane pytania dotyczące ekranu GNU, aby uzyskać więcej informacji.
Biorąc pod uwagę, Ctrl+ A Azmienia się tylko do następnego polecenia, prawdopodobnie jest ustawiany przez $PS1
(wszystkie powłoki) lub $PROMPT_COMMAND
/ DEBUG trap
(tylko bash) lub precmd
/ preexec
(tylko zsh).
Należy spojrzeć na każdym miejscu, \e
lub \033
pojawia się k
lub \\
po nim, w zasadzie jak moim settitle
przykładzie powyżej.
AKTUALIZACJA
Powiedziałeś, że masz zwyczaj preexec
.
Dlaczego nie zmienić tego na to:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
Następnie możesz ustawić niestandardowy tytuł, uruchamiając:
TITLE="my title"
i rozbroić tytuł, uruchamiając
TITLE=
Nie zapomnij zmienić precmd
i $PS1
również w razie potrzeby.
NA BOK
Możesz nawet rozszerzyć to do wszystkich terminali (np xterm
, gnome-terminal
itp) przez nie ciężko kodowania \ek
i \e\\
.
Tak to robię:
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}"
}
Następnie możesz zmienić preexec
na:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
. A jeśli chodzi o monit, masz na myśli, że muszę modyfikować$PS1
za każdym razem, gdy chcę, aby tytuł się nie zmieniał?\e
lub\033
.Jeśli tytuł okna odzwierciedla aplikację aktualnie uruchomioną w oknie, to dlatego, że robi to twoja powłoka. Jeśli to robi, to dlatego, że twoja dystrybucja, administrator systemu lub skonfigurowałeś ją.
Jeśli polecenie pojawia się jako tytuł okna, gdy polecenie jest uruchomione, odbywa się to przez
preexec
funkcję (w zsh) lub jej emulację pod bash .Jeśli tytuł zmienia się po zakończeniu każdego polecenia, jest to wykonywane przez
precmd
funkcję w zsh,PROMPT_COMMAND
parametr w bash lub jako część znaku zachęty (PS1
parametru) w dowolnej powłoce. (Polecenie zmiany tytułu jest sekwencją zmiany znaczenia emitowaną przez dowolną aplikację jako część strumienia wyjściowego terminala, dzięki czemu można ją osadzić w monicie).Sprawdzić sekwencji ucieczki podobnego
\e]0;new title\a
,\e]2;new title\a
albo\eknew title\e\\
w pliku inicjującym powłoki (~/.bashrc
,~/.zshrc
...). Jeśli nic odpowiednie ustawienie może być w pliku systemowym (np/etc/bash.bashrc
,/etc/zsh/zshrc
); następnie zastąp ten parametr lub funkcję we własnym pliku inicjującym.Zobacz odpowiedź Mikela na nadpisywanie ustawień tytułu w
preexec
.źródło
preexec
funkcję zdefiniowaną w moim .zshrc. Chodzi o to, że takie zachowanie chcę ... przez większość czasu. Chciałbym móc go wyłączyć w locie na jednym ekranie. Może jest zmienna, którą mogę uzyskać wpreexec
funkcji, gdy ręcznie ustawię tytuł, czy coś takiego?preexec
funkcję, ja lub ktoś inny prawdopodobnie zaproponuje prostą zmianę.preexec
, ale Greg nie powiedział, że używazsh
. To mnie nauczy. ;-)preexec
projekt jest lepszy niż mój.