僕のYak Shavingは終わらない

車輪の再発明をやめたらそこには壮大なYakの群れが

zshでエラーや時間のかかる処理後に通知センターで通知するようにする

※現在最新版のMavericksだとterminal-notifierが動かないかも・・・

最近やっと山ライオンを使い始めました。

TDDのときにprove+Guard+通知センターで捗る感じにしてましたが、そういえば昔はGrowl使ってたなと。

zshでエラーの時にGrowlで通知するようにする - 僕の車輪の再発明

で、今はこれだとエラーが出てしまっている状態でしたのでサクッと通知センターに変更しました。

ここを見て変更しただけです。

install

通知センターをターミナルで使うためのコマンドをhomebrewでインストールします。

brew install terminal-notifier

使い方

terminal-notifier -message Javaだいすき

f:id:kazuph1986:20131023004251g:plain

エラー時に通知

.zshrcに以下を追加

PROMPT='`exitStatus=$?;if [ ! $exitStatus -eq 0 ];then which terminal-notifier > /dev/null 2>&1 && terminal-notifier -message error! -m "see result" ;fi;`?  %{%(?.$fg_bold[green].$fg_bold[red])%}%h %{$fg[cyan]%}%2~ %{$fg_bold[blue]%}$(git_prompt_info) %{$reset_color%}» '

と言っても僕オリジナルな感じなのでこんな感じのターミナルになってしまします。

f:id:kazuph1986:20131023004535p:plain
例によってoh-my-zshが入っている前提です。

f:id:kazuph1986:20131023004812g:plain

長い処理の後に通知

carton installとかコンパイルとかでめっちゃ時間かかるときに便利です。

# 一定時間以上かかる処理の場合は終了時に通知してくれる
local COMMAND=""
local COMMAND_TIME=""
precmd() {
    if [ "$COMMAND_TIME" -ne "0" ] ; then
        local d=`date +%s`
        d=`expr $d - $COMMAND_TIME`
        if [ "$d" -ge "30" ] ; then
            COMMAND="$COMMAND "
            which terminal-notifier > /dev/null 2>&1 && terminal-notifier -message "${${(s: :)COMMAND}[1]}" -m "$COMMAND";
        fi
    fi
    COMMAND="0"
    COMMAND_TIME="0"
}
preexec () {
    COMMAND="${1}"
    if [ "`perl -e 'print($ARGV[0]=~/ssh|^vi/)' $COMMAND`" -ne 1 ] ; then
        COMMAND_TIME=`date +%s`
    fi
}

ものすごい前に設定していたのですが、ネタ元なにかなぁと思ったら見つけました。

処理時間が一定以上かかったらGrowlで通知するzshrc - 心魅 - cocoromi -

その他

なんかzshとiterm2を組み合わせる方法もあるみたいですが、これだけでも簡単ですね。

まとめ

超便利!!!