tmux上のweechatのhotlist情報を通知する

自分のIRC環境はVPSサーバー上でZNCを使い つつ、そのサーバ内でtmuxのセッションをずっと上げておいてその中でweechatを起動 して繋ぎっぱなしにしている、というかんじで。
highlightされるようなものはもちろんim.kayac.comなどに通知させているけども、それ以外のもの読む際にちょいちょいそのweechatを覗きにいくのも面倒だし ある程度発言が溜まったときにチェックするようにしたい。


tmux上の画面の表示内容は外部から取得できる、ということでweechatのstatus lineからhotlist(未読メッセージのあるchannel情報などが表示される領域)を抜き出して通知する、というのをやってみた。

まずはこんな簡単なスクリプトを用意。

#!/bin/sh
weechat_window=$(tmux list-windows | grep weechat | perl -ne 'print+(split/:/)[0]')
tmux capture-pane -p -t ${weechat_window}.0 | tail -2 | head -1 | perl -ne 'print+(split/ /,$_,5)[4]'

tmux list-windowsでweechatを開いているwindow番号を取得、tmux capture-pane -pでそのwindowの表示内容を標準出力に。下から2番目の行がweechatのstatus lineなので、そこの内容を適当に取得することでhotlistの内容を得る。
デフォルトだと[H: 4:#abc(2,5), 6]みたいな内容。重要なやつ以外はbuffer numberのみの表示になって、それではあまりに不便なので、設定で/set weechat.look.hotlist_names_level 14と変更して通常のメッセージに関してもbuffer nameをhotlistに表示させる。

http://www.weechat.org/files/doc/stable/weechat_user.ja.html#option_weechat.look.hotlist_names_level



で、あとはローカル環境の方で定期的にそのhotlist情報を取得して、更新あれば通知、と。

status=$(ssh ${VPS_HOST} 'curl "https://gist.githubusercontent.com/sugyan/11364796/raw/weechat_status_from_tmux.sh" 2> /dev/null | sh')
if [ -n "${status}" ]; then
    echo display notification \"${status}\" with title \"weechat status\" | osascript
fi

Mac OS X MavericksではこんなかんじでAppleScriptつかってコマンド経由で通知センターにとばせるんですね。


特に未読のものがなければ何も通知されないし、何かきても「このchannelの未読はまだ見なくていいや」ってときは無視すればいいし。ということで能動的に未読の会話がないかをチェックしに行く必要がなくなるので心穏やかに過ごせる。