以下のエントリを参考にさせてもらったところ screen 上で emacs を開いて、 shell-mode の出力が綺麗にできるようになりました。
問題になっていたのがコメント欄にもあった screen でステータスバーに履歴を 表示させていた場合にエスケープ文字でおかしくなるパターンです。
.zshrc で定義している条件式をこんな感じにしてみました。 $WINDOW は screen 使用時に定義されるウィンドウ番号で、あと shell-mode 時の $TERM 変数を見て拒否するようにしてみました。
if [ "$WINDOW" -a "$TERM" != "dumb" ]; then
preexec() {
# see [zsh-workers:13180]
# http://www.zsh.org/mla/workers/2000/msg03993.html
emulate -L zsh
local -a cmd; cmd=(${(z)2})
echo -n "^[k$cmd[1]:t^[\\"
}
fi
screen のステータスバーに出力する書き方は、はてな技術発表会日記 のものを使わせてもらっています。
今までは綺麗に出力されなかったことから、 eshell をちょろちょろ使っていました。 エントリを書いておいてあれですが、最近は screen 使ってるから shell-mode はあまり使わないかな。