最近、完全に勢いで blink(1) ってものを買ってみた。どんなもんかは適当にググるとこことかみつかると思うけど、要はNotification用途のフルカラーLEDのUSBデバイス。小さな USB デバイスで、任意の色で光らせることができる。
色々応用が可能ってことで、コマンドラインからも制御可能なので、このコマンドラインツールをラップする形で Vim プラグイン書いてみた。
https://github.com/thinca/vim-blink1
とりあえずミニマムな機能しか入ってない感じ。関数から操作できるようにもなってるけど、API はてきとーです*1。
:Blink1 white :Blink1 red :Blink1 80 80 255 :Blink1 0xff,0,0xff
で、まあ、作る前からわかってたんだけど、このデバイスは通知が主な目的で、Vim を使ってるってことはすでにマシンと向き合ってるってことなので、外部デバイスで通知するなら画面内で通知した方が速いんだよね。じゃあ何で作ったのか。魔が差したんです…。
まあでも折角作ったので活用してみる。私はサーバマシンで常時 lingr.vim を立ち上げているのだけど、ここで新しい発言があったら光って知らせるようにしてみた。
augroup vimrc-plugin-lingr autocmd! User plugin-lingr-message call s:lingr_update_unread() augroup END function! s:lingr_update_unread() let unread_count = lingr#unread_count() if unread_count == 0 " 発言がない時は消す call blink1#off() else " 発言がある場合は発言数に応じて青から徐々に赤にする let read_max = 200 let rgb_max = 0xFF let v = s:clamp(unread_count * rgb_max / read_max, 0, rgb_max) call blink1#rgb(v, 0, rgb_max - v) endif endfunction function! s:clamp(value, min, max) return a:value < a:min ? a:min : \ a:max < a:value ? a:max : \ a:value endfunction
便利(多分)!
今後としてはパターン点灯とか(コマンドラインからできるっぽいけどちゃんと把握してない)が考えられるけど、やるかどうかは気分と要望次第かな…。