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?

  • Which shell do you use?
    – marco
    Jan 18, 2011 at 20:01
  • I'm using bash.
    – liewl
    Jan 18, 2011 at 20:12

2 Answers 2


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}";;
    printf '\ek%s\e\\' "$HPWD"
  PROMPT_COMMAND="screen_set_window_title; $PROMPT_COMMAND"

Or for your ~/.zshrc (for zsh users):

precmd () {
  local tmp='%~'
  local HPWD=${(%)tmp}
  if [[ $TERM == screen* ]]; then
    printf '\ek%s\e\\' $HPWD

For more information, look up under Dynamic titles in the Screen manual, or under “Titles (naming windows)” in the man page.

  • 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, 2011 at 5: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. Jan 19, 2011 at 8:08
  • 2
    Great 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"`;;
    – user6176
    Mar 30, 2011 at 21:32

You can put this into the .bashrc to change the terminal name (window name) to the last directory (or file name) that you are in (working on).

case "$TERM" in xterm*|rxvt*) PROMPT_COMMAND='echo -ne "\033]0;${PWD##*/}\007"' ;; *) ;; esac

more described here: link

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .