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?
Asked
Active
Viewed 1.2k times
21
Gilles 'SO- stop being evil'
- 807,993
- 194
- 1,674
- 2,175
liewl
- 405
- 2
- 5
- 10
-
Which shell do you use? – marco Jan 18 '11 at 20:01
-
I'm using bash. – liewl Jan 18 '11 at 20:12
2 Answers
23
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.
Gilles 'SO- stop being evil'
- 807,993
- 194
- 1,674
- 2,175
-
I 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' – liewl Jan 19 '11 at 05:40
-
@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. – Gilles 'SO- stop being evil' Jan 19 '11 at 08:08
-
2Great 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"\`;;` – Mar 30 '11 at 21:32