適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

Zshでホスト名とユーザ名とカレントディレクトリをTerminal(&タブ)のタイトルに表示させてみた

Gnome Terminalはタブを利用できるので重宝しているのですが、普段の開発時には複数のタブを開きサーバにログインしているので、今開いているタブがどのサーバなのか咄嗟に分からないことがあります。

なのでホスト名とユーザ名とカレントディレクトリをTerminal(&タブ)のタイトルに表示するようにしました。


まーありがちな処理なのですが、カレントディレクトリが深い場合に表示しきれなくなってしまうので、ちょっとだけ工夫して下記のように省略表示させました。

/path/to/directory
↓
/p/t/directory


~/.zshrc

function changetitle {
  # pwdを二回も実行しているのがなんかダサい...
  current_dir=`pwd | sed -e "s%\(/\([^.]\|\..\)\)[^/]*%\1%g"``pwd | sed -e "s%^.*/\([^.]\|\..\)\([^/]*\)$%\2%"`
  # タイトル用に整形
  title=[${USER}@${HOST%%.*}]${current_dir}
  case "${TERM}" in
    xterm*|kterm*|rxvt*)
      echo -ne "\033]0;${title}\007"
    ;;  
    screen*)
      echo -ne "\033P\033]0;${title}\007\033\\"
    ;;  
  esac
}

# zsh起動時にとりあえず実行
changetitle

# cd実行後に変更
function chpwd() {
  changetitle
}

# Screenの場合、window切り替え時に前のwindowのタイトルがTerminal(&タブ)のタイトルとして
# 残ってしまうのでせめてcdコマンド以外のコマンドでも実行前にタイトルを変更
preexec () {
  changetitle
}