Залежить, як все налаштовано, але за замовчуванням щось подібне повинно працювати.
settitle() {
printf "\033k$1\033\\"
}
Потім запустіть:
settitle NEWTITLE
.
Докладніші відомості див. У заголовках екрана та документах на екрані GNU .
Даний Ctrl+ A Aзмінює його лише до наступної команди, ймовірно, вона встановлюється $PS1
(усі оболонки), або $PROMPT_COMMAND
/ DEBUG trap
(лише bash) або precmd
/ preexec
(тільки zsh).
Ви повинні дивитися на будь-яке місце , яке \e
або \033
з'являється з k
або \\
після нього, в основному , як мій settitle
приклад вище.
ОНОВЛЕННЯ
Ви сказали, що у вас є звичай preexec
.
Чому б не змінити це на це:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
Потім ви можете встановити власну назву, запустивши:
TITLE="my title"
і скасувати заголовок, запустивши
TITLE=
Не забудьте змінити, precmd
а $PS1
також, якщо потрібно.
ОСТОРОЖНО
Можна навіть розширити це на все термінали (наприклад xterm
, gnome-terminal
і т.д.), що не жорсткого кодування \ek
і \e\\
.
Ось як я це роблю:
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}"
}
Потім ви можете змінити свій preexec
на:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
. А щодо підказки, ви маєте на увазі, що я повинен змінювати,$PS1
коли я хочу, щоб заголовок не змінювався?