GNU Screen: new window name change
11,828
Make your shell change the window title every time it changes directory, or every time it displays a prompt.
For your ~/.bashrc
:
if [[ "$TERM" == screen* ]]; then
screen_set_window_title () {
local HPWD="$PWD"
case $HPWD in
$HOME) HPWD="~";;
$HOME/*) HPWD="~${HPWD#$HOME}";;
esac
printf '\ek%s\e\\' "$HPWD"
}
PROMPT_COMMAND="screen_set_window_title; $PROMPT_COMMAND"
fi
Or for your ~/.zshrc
(for zsh users):
precmd () {
local tmp='%~'
local HPWD=${(%)tmp}
if [[ $TERM == screen* ]]; then
printf '\ek%s\e\\' $HPWD
fi
}
For more information, look up under Dynamic titles in the Screen manual, or under “Titles (naming windows)” in the man page.
Related videos on Youtube
Author by
liewl
Updated on September 17, 2022Comments
-
liewl over 1 year
I can change the name of a window with Ctrl-a Shift-a. Instead of editing several window names by hand, is there a way to have them automatically named after the current directory?
-
marco almost 13 yearsWhich shell do you use?
-
liewl almost 13 yearsI'm using bash.
-
-
liewl almost 13 yearsI copypasted the bash one on my .bashrc and it is giving off these errors: bash: PROMPT_COMMAND: line 0: syntax error near unexpected token
;' bash: PROMPT_COMMAND: line 0:
;screen_set_window_title' -
Gilles 'SO- stop being evil' almost 13 years@David: Sorry, the point was to accumulate commands in
PROMPT_COMMAND
if there was already something, but I had the components in the wrong order. -
Admin over 12 yearsGreat trick @Gilles. For those who like to keep window titles short, you can drop the full path and only keep the basename. Just replace
$HOME/*) HPWD="~${HPWD#$HOME}";;
with*) HPWD=`basename "$HPWD"`;;