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.

Share:
11,828

Related videos on Youtube

liewl
Author by

liewl

Updated on September 17, 2022

Comments

  • liewl
    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
      marco almost 13 years
      Which shell do you use?
    • liewl
      liewl almost 13 years
      I'm using bash.
  • liewl
    liewl almost 13 years
    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'
  • Gilles 'SO- stop being evil'
    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
    Admin over 12 years
    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"`;;