zsh + screen で使いやすいshell環境にしてみた。

いままではbashでしたが、zshにしたのは先日の福岡Debian勉強会で影響されたからです。(笑)

以下の要望を満たしたかったのでいろいろいじってみました。

  • いまいるホストとttyを把握(表示)したい
  • いま走ってるコマンドを表示したい(tail -f hogelog とか同時に走らせてわからなくなるので)
  • 走ってないとき(コマンド待ち)のときはそうとわかるようにしたい

結果、以下のようなかんじになりました。

.screenrc

escape ^Tt

#画面下部に起動ウィンドウ名を出す
shelltitle "$ |zsh"

hardstatus alwayslastline "%{= Gk}[%m/%d %02c]%{= Mw}%l%{= BW}%n:%H%{= Wb} %t"

#起動時にでるメッセージを表示させない
startup_message off 

# ビープを鳴らさない
vbell off 

shelltitleを設定するとことと、タイトルは %t で出すってことかな。
(ちなみにescape は Ctrl-Tに変更してあります)

.zshrc

PROMPT='%B%F{blue}%n(%m:%l)%F %F{yellow}%(3~|.../|)%2~%F{red} %# %b%f%k'  

case "${TERM}" in
screen*|ansi*)
        preexec()
        {
                echo -ne "\ek${1%% 2%% *}\e\\"
        }
        precmd()
        {
                echo -ne "\ek$(basename $SHELL) :::: waiting your command ... > (:3[___]\e\\"
        }
        ;;
esac

実行されるときにpreexec()、戻ってくるときにprecmd()が呼ばれますのでそれをひっかけます。
echo -ne “¥ek〜¥e¥¥” でウインドウタイトルの変更。
ポイントはこんなところでしょうか。

ただ。
{1%% 2%% *}であってるのか自信がない…。

screenを起動するとこんなかんじ。
2013022501

コマンドを実行中はコマンドを表示(例では top コマンド)
2013022502

引数もちゃんと表示されます。sudoしてもちゃんと出る。
2013022503

コマンドが終わって戻ってきたらちゃんと待機表示に変わります
2013022504

以下サイトを参考にしました。

Comments are closed.