Зависит от того, как все настроено, но по умолчанию что-то вроде этого должно работать.
settitle() {
printf "\033k$1\033\\"
}
Затем запустите:
settitle NEWTITLE
,
Для получения более подробной информации смотрите документацию к заголовку экрана и faq экрана 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
всякий раз, когда я хочу, чтобы заголовок не менялся?