rename tmux window name to prompt_command, ps1 or remote ssh hostname?
I would love to be able to have my tmux window title automatically renamed to prompt_command, ps1 or just the hostname of a machine I ssh
to. having 9 windows opened labeled "ssh" is really useless. Doing sysadmin work I open new screens and ssh around to much to manually rename them.
One thing I noticed is tmux
updates the xterm
window title so I feel like it has to know.
Any help? I would even be willing to go back to screen
if I could get this feature.
I'm not aware of any way to make it look at your PS1
directly.
However, tmux
understands the same commands to set the window name as screen
does.
So you can define a function like this in your ~/.bashrc
or ~/.zshrc
:
settitle() {
printf "\033k$1\033\\"
}
and then call settitle
from anywhere.
For example, you could include it in your PS1
variable, e.g.
PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '
or via PROMPT_COMMAND
:
PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1
Now I understand you have tmux
running on your desktop, and you want ssh
commands to have the hostname rather than ssh
, that's much easier.
Given you've added settitle
to your local ~/.bashrc
, all you want to do is add this too:
ssh() {
settitle "$*"
command ssh "$@"
settitle "bash"
}
Replace bash with zsh, or something else more appropriate if necessary.
tmux rename-window -t${TMUX_PANE} "Title Text"
This is the proper way to set tmux titles in a window. The $TMUX_PANE variable is set by tmux and is used to differentiate between different panes.
Just for people who came here by searching how to change the title of a tmux session:
Ctrl + B, $
This will give you a prompt, where you can rename the active session.
To change the active window use komma instead:
Ctrl + B, ,
see: How do I rename a session in tmux?
Combining both Mikel's and UtahJarhead's answers, I used the following in .zshrc
to solve this problem:
ssh() {
tmux rename-window "$*"
command ssh "$@"
exit
}
I have automatic window renaming enabled by default, and I can't find a way to reenable it after exiting the remote host. Thus, I just exit the window entirely -- not an issue for my workflow. If you'd prefer to rename it to, say, 'bash', you could replace the exit
line with tmux rename-window "bash"
.
Instead of exit
or tmux rename-window "bash"
you can use
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
}
This re-activates the normal function that renames automatically window for next commands.
The if
block prevents from (without it) renaming tmux
current window from ssh
commands used on other shells (out of tmux
).