Depende de como as coisas são configuradas, mas, por padrão, algo assim deve funcionar.
settitle() {
printf "\033k$1\033\\"
}
Então corra:
settitle NEWTITLE
.
Consulte a documentação do título da tela e o FAQ da tela do GNU para obter mais detalhes.
Dado que o Ctrl+ A Aestá apenas alterando-o até o próximo comando, provavelmente está sendo definido por $PS1
(todos os shells), ou $PROMPT_COMMAND
/ DEBUG trap
(somente bash) ou precmd
/ / preexec
(apenas zsh).
Você deve olhar para qualquer lugar que \e
ou \033
aparece com k
ou \\
depois dela, basicamente, como o meu settitle
exemplo acima.
ATUALIZAR
Você disse que tinha um costume preexec
.
Por que não mudar para isso:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
Em seguida, você pode definir um título personalizado executando:
TITLE="my title"
e desmarque o título executando
TITLE=
Não se esqueça de mudar precmd
e $PS1
também se necessário.
A PARTE, DE LADO
Você pode até mesmo estender isso para todos os terminais (por exemplo xterm
, gnome-terminal
, etc.) por não codificação duro a \ek
e \e\\
.
É assim que eu faço:
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}"
}
Então você pode mudar preexec
para:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
. E sobre o prompt, você quer dizer que eu tenho que modificar$PS1
sempre que quiser que o título não mude?\e
ou\033
.Se o título da janela reflete o aplicativo atualmente em execução na janela, é porque seu shell está fazendo isso. Se estiver fazendo isso, é porque sua distribuição, seu administrador de sistema ou você o configurou.
Se o comando aparecer como o título da janela enquanto o comando estiver em execução, isso será feito pela
preexec
função (no zsh) ou por uma emulação do mesmo no bash .Se o título for alterado quando cada comando for concluído, isso será feito pela
precmd
função zsh, peloPROMPT_COMMAND
parâmetro bash ou como parte do prompt (PS1
parâmetro) em qualquer shell. (O comando para alterar o título é uma sequência de escape emitida por qualquer aplicativo como parte do fluxo de saída do terminal, para que possa ser incorporada em um prompt.)Procure uma sequência de escape como
\e]0;new title\a
,\e]2;new title\a
ou\eknew title\e\\
em seu arquivo de inicialização shell (~/.bashrc
,~/.zshrc
...). Se não houver nada relevante, a configuração pode estar em um arquivo do sistema (por exemplo/etc/bash.bashrc
,/etc/zsh/zshrc
); substitua esse parâmetro ou função em seu próprio arquivo de inicialização.Consulte a resposta de Mikel para obter uma configuração de título substituível em
preexec
.fonte
preexec
função definida no meu .zshrc. O problema é que esse é o comportamento que eu quero ... na maioria das vezes. Eu gostaria de poder desativá-lo rapidamente em uma tela específica. Talvez haja uma variável que eu possa obter napreexec
função quando defino manualmente o título, ou algo assim?preexec
função, eu ou alguém provavelmente poderá sugerir uma mudança simples.preexec
, mas Greg não disse que estava usandozsh
. Isso vai me ensinar. ;-)preexec
design é melhor que o meu.