screen, zshメモ
GNU screenのコンフィグに「hardstatus alwayslastline ...」を書いていると一番下のラインにそのterminalのシェル(zshやbash)の文字列が表示されるが、どこのterminalで何の作業をしているか忘れてしまった場合全て「zsh」などと表示されていて見分けがつかないので以下のように設定して「直前に打ち込んだコマンド」を表示させるようにする。
※zshのみ設定可能です。
.zshrcに以下の設定を追加する。
if [ "$TERM" = "screen" ]; then chpwd () { echo -n "^[_`dirs`^[\\" } preexec() { emulate -L zsh local -a cmd; cmd=(${(z)2}) case $cmd[1] 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 ;& *) 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 } chpwd fi
ここで設定上の注意が以下2点あります。
1. ^[ 記号は制御文字なのでそのままコピペしては正常に作動しないので以下のように入力する。
viでファイルを開きinsertモードにする。次にCtrl-vを押しESCを押す。すると制御文字「^[」が入力されます。
2. 「$TERM = ...」の所で.screenrcでカラー化のために「term xterm-256color」などとしている場合はこの設定箇所もそのように書き直す必要があります。