screenのウィンドウ・タイトルに実行したコマンド名を出す(sudoでもよさげに)

はてなダイアリー

これをまるっとコピペして使っているのだけど、 sudo aptitude update などと打ったときに sudo とだけ出てきていまいちわかりづらい。

すこし手を入れて、 sudo したときには管理者権限で実行したコマンドも出すようにした。

# http://d.hatena.ne.jp/Ubuntu/20090119/1232368677
function show_window_title() {
  emulate -L zsh
  local -a cmd
  cmd=(${(z)2})

  case $cmd[2] in
    fg)
      if (( $#cmd == 1)); then
        cmd=(builtin jobs -l %+)
      else
        cmd=(builtin jobs -l $cmd[2])
      fi
      ;;
    %*)
      cmd=(builtin jobs -l $cmd[1])
      ;;
    cd)
      if (( $#cmd == 2 )); then
        cmd[1]=$cmd[2]
      fi
      ;;
    ls|clear)
      echo -n "^[k$ZSH_NAME^[\\"
      return
      ;;
    sudo) # http://teq.g.hatena.ne.jp/aereal/20100709/1278662144
      echo -n "^[k$cmd[1] $cmd[2]:t^[\\"
      return
      ;;
    screen|pwd)
      return
      ;;
    *)
      echo -n "^[k$cmd[1]:t^[\\"
      return
      ;;
  esac

  local -A jt
  jt=(${(kv)jobtexts})
  $cmd >>(read num rest
          cmd=(${(z)${(e):-\$jt$num}})
          echo -n "^[k$cmd[1]:t^[\\") 2>/dev/null
}