J'aimerais pouvoir pouvoir renommer automatiquement le titre de la fenêtre de tmux en Prompt_command, ps1 ou simplement le nom d’hôte d’une machine pour laquelle j’ai ssh
. avoir 9 fenêtres ouvertes étiquetées "ssh" est vraiment inutile. En faisant sysadmin, j'ouvre de nouveaux écrans et ssh autour de beaucoup pour les renommer manuellement.
Une chose que j’ai remarquée est que tmux
met à jour le titre de la fenêtre xterm
afin que j’ai l’impression qu’il doit le savoir.
De l'aide? Je serais même prêt à retourner à screen
si je pouvais obtenir cette fonctionnalité.
Je ne connais aucun moyen de le faire regarder directement à votre PS1
.
Cependant, tmux
comprend les mêmes commandes pour définir le nom de la fenêtre que screen
name__.
Ainsi, vous pouvez définir une fonction comme celle-ci dans vos ~/.bashrc
ou ~/.zshrc
:
settitle() {
printf "\033k$1\033\\"
}
puis appelez settitle
de n’importe où.
Par exemple, vous pouvez l’inclure dans votre variable PS1
, par exemple.
PS1='$Host:$PWD$(settitle $Host:$PWD)$ '
ou via Prompt_COMMAND
:
Prompt_COMMAND='$(settitle $Host:$PWD)'
# and don't change PS1
Je comprends maintenant que vous avez tmux
exécuté sur votre bureau et que vous souhaitez que les commandes ssh
aient le nom d’hôte plutôt que ssh
name__, c’est beaucoup plus facile.
Étant donné que vous avez ajouté settitle
à votre ~/.bashrc
local, tout ce que vous voulez faire est d'ajouter ceci également:
ssh() {
settitle "$*"
command ssh "$@"
settitle "bash"
}
Remplacez bash par zsh, ou par quelque chose d'autre plus approprié si nécessaire.
tmux rename-window -t${TMUX_PANE} "Title Text"
C’est la bonne façon de définir les titres tmux dans une fenêtre. La variable $ TMUX_PANE est définie par tmux et permet de différencier les différents volets.
Juste pour les personnes qui sont venues ici en cherchant comment changer le titre d'une session tmux:
Ctrl + B, $
Cela vous donnera une invite, où vous pouvez renommer la session active.
Pour changer la fenêtre active, utilisez plutôt komma:
Ctrl + B, ,
En combinant les réponses de Mikel et d'UtahJarhead, j'ai utilisé ce qui suit dans .zshrc
pour résoudre ce problème:
ssh() {
tmux rename-window "$*"
command ssh "$@"
exit
}
Le renommage automatique des fenêtres est activé par défaut et je ne trouve pas le moyen de le réactiver après avoir quitté l'hôte distant. Ainsi, je viens de quitter la fenêtre entièrement - pas un problème pour mon flux de travail. Si vous préférez le renommer en, par exemple, 'bash', vous pouvez remplacer la ligne exit
par tmux rename-window "bash"
.
Au lieu de exit
ou tmux rename-window "bash"
, vous pouvez utiliser
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
tmux rename-window "$*"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}
Ceci réactive la fonction normale qui renomme automatiquement la fenêtre pour les prochaines commandes.
Le bloc if
empêche de renommer (sans le renommer) tmux
la fenêtre en cours à partir de ssh
commandes utilisées sur d’autres shells (à partir de tmux
).
Une autre solution serait de renommer la fenêtre active en son nom précédent, après la session ssh:
ssh() {
local code=0
local ancien
ancien=$(tmux display-message -p '#W')
if [ $TERM = tmux -o $TERM = tmux-256color ]; then
tmux rename-window "$*"
command ssh "$@"
code=$?
else
command ssh "$@"
code=$?
fi
tmux rename-window $ancien
return $code
}
Je sais que cela a été répondu il y a longtemps, mais je pensais ajouter ce que j'ai tripoté et trouvé (en fonction de la réponse acceptée). J'ai ajouté cela au fichier/etc/bashrc de tous mes serveurs (facile à utiliser). faire avec du tissu, marionnette, etc)
settitle() {
printf "\033k$1\033\\"
}
bash_Prompt_command() {
settitle "`hostname -s`:$PWD"
}
Prompt_COMMAND=bash_Prompt_command
Et il définit le nom de la fenêtre automatiquement à l'écran ou tmux.
Cela fonctionne dans tmux 2.1
et avec zsh localement et sur les serveurs:
ssh() {
tmux set-option allow-rename off 1>/dev/null
tmux rename-window "ssh/$*"
command ssh "$@"
tmux set-option allow-rename on 1>/dev/null
}
J'ai dû désactiver manuellement l'option autoriser/renommer avant de changer le nom de la fenêtre - sinon, le chemin actuel de la plupart de mes serveurs a été modifié (également à l'aide de zsh). La bonne chose est que si vous réactivez l'option allow-rename, cela fonctionne immédiatement.
Je noterais dans tous ces exemples avec:
command ssh "$@"
Vous voudrez peut-être récupérer le code de sortie et quitter la fonction, sinon, par exemple:
ssh server false
Retournera 0.
command ssh"$@"
_exitcode=$?
#other code
exit $_exitcode
Sortira ssh avec le code de retour de ssh.
Ajoutez ceci à .profile
ou .bashrc
# Change window name for `tmux`
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
#tmux rename-window "$(echo $* | cut -d . -f 1)"
tmux rename-window "$(echo $* | cut -d @ -f 2)"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}