Self Reference

Are you receiving this?

MacのVimで通知センターを使う

Vim Advent Calenderの338日目ですこんにちは。

Macのお話です。
OSXには、画面の右上にメールの新着やスケジュールの通知、ソフトウェアのアップデート等をポップアップ通知してくれる通知センター機能があります。

主にシステムからの通知に使われていたのですが、OSがMavericksとなり、ユーザーもコマンドラインから利用できるようになりました。
こんな感じで使えます。

1
echo 'display notification "VimConfは11月16日開催です♪" with title "Vim Girl"' | osascript'

display notificationの引数に表示したい文字列を指定して、AppleScriptとして実行します。
with titleやsubtitleを指定すれば、メッセージのタイトルを変更することができます。

では、Vimからも利用できるようにしてみましょう。
.vimrcに直接書いてみます。

1
2
3
4
5
function! s:mac_notify(say)
  call vimproc#system("echo 'display notification "."\"".a:say."\" with title \"Vim\"' | osascript")
endfunction
command! -nargs=1 MacNotify call s:mac_notify(<q-args>)
command! -nargs=1 MacNotifyExpand call s:mac_notify(<args>)

MacNotifyコマンドを定義して、引数の文字列を表示するようにしました。
変数とかを指定して展開したい場合は、MacNotifyExpandコマンドの方を使います。
実行にはvimprocが必要です。

VimScript化してgithubにもあげました。
https://github.com/modsound/mac_notify-vim.git

以下利用例です。
Vim Girlが天気予報してくれるように設定してみました。秘書っぽい機能です。

1
2
3
4
5
6
7
8
function! s:weather_report()
  let g:weather = system("curl --silent http://weather.livedoor.com/forecast/rss/area/130010.xml
  \ | grep '<description>'
  \ | sed -e 's/<description>//g'
  \ | sed -e 's@</description>@@g' | head -n 3 | tail -n 1")
  exec "MacNotifyExpand g:weather"
endfunction
command! WeatherReport call s:weather_report()

いい感じです。
コンパイルが完了したときとか、未操作時間が10分を超えたときとかに通知してくれると面白いかもしれません。

みなさんもMacNotify.vimを使ってVimを秘書にしてみませんか?

明日のVim Advent Calendarは@thincaさんです!