Cela dépend de la façon dont les choses sont configurées, mais par défaut, quelque chose comme ça devrait fonctionner.
settitle() {
printf "\033k$1\033\\"
}
Exécutez ensuite:
settitle NEWTITLE
.
Voir la documentation sur le titre de l'écran et la FAQ sur l'écran GNU pour plus de détails.
Étant donné que Ctrl+ A Ane le modifie que jusqu'à la prochaine commande, il est probablement défini par $PS1
(tous les shells), ou $PROMPT_COMMAND
/ DEBUG trap
(bash uniquement) ou precmd
/ preexec
(zsh uniquement).
Vous devriez chercher un endroit qui \e
ou \033
apparaît avec k
ou \\
après, au fond comme mon settitle
exemple ci - dessus.
MISE À JOUR
Vous avez dit que vous aviez une coutume preexec
.
Pourquoi ne pas le changer en ceci:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
Ensuite, vous pouvez définir un titre personnalisé en exécutant:
TITLE="my title"
et annulez le titre en exécutant
TITLE=
N'oubliez pas de changer precmd
et $PS1
aussi si nécessaire.
DE CÔTÉ
Vous pouvez même l' étendre à tous les terminaux (par exemple xterm
, gnome-terminal
, etc.) par pas coder en dur le \ek
et \e\\
.
Voici comment je le fais:
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}"
}
Ensuite, vous pouvez changer votre preexec
pour:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
. Et à propos de l'invite, vous voulez dire que je dois modifier$PS1
chaque fois que je veux que le titre ne change pas?\e
ou\033
.Si le titre de votre fenêtre reflète l'application en cours d'exécution dans la fenêtre, c'est parce que votre shell le fait. Si c'est le cas, c'est parce que votre distribution, votre administrateur système ou vous l'avez configuré.
Si la commande apparaît comme le titre de la fenêtre pendant l'exécution de la commande, cela se fait par la
preexec
fonction (en zsh), ou une émulation de celle-ci sous bash .Si le titre change à la fin de chaque commande, cela se fait par la
precmd
fonction dans zsh, lePROMPT_COMMAND
paramètre dans bash ou dans le cadre de l'invite (PS1
paramètre) dans n'importe quel shell. (La commande pour changer le titre est une séquence d'échappement émise par n'importe quelle application dans le cadre du flux de sortie du terminal, elle peut donc être intégrée dans une invite.)Recherchez une séquence d'échappement comme
\e]0;new title\a
,\e]2;new title\a
ou\eknew title\e\\
dans votre fichier d'initialisation du shell (~/.bashrc
,~/.zshrc
, ...). S'il n'y a rien de pertinent, le paramètre peut être dans un fichier système (par exemple/etc/bash.bashrc
,/etc/zsh/zshrc
); puis remplacez ce paramètre ou cette fonction dans votre propre fichier d'initialisation.Voir la réponse de Mikel pour un paramètre de titre remplaçable dans
preexec
.la source
preexec
fonction définie dans mon .zshrc. Le truc c'est que c'est le comportement que je veux ... la plupart du temps. J'aimerais pouvoir le désactiver à la volée sur un écran spécifique. Il y a peut-être une variable que je peux obtenir dans lapreexec
fonction lorsque je définis manuellement le titre, ou quelque chose comme ça?preexec
fonction, moi ou quelqu'un d'autre peut probablement suggérer un changement simple.preexec
, mais Greg n'a pas dit qu'il utilisaitzsh
. Ça va m'apprendre. ;-)preexec
design est meilleur que le mien.