Notification Center経由で時報を流す

遅ればせながらMountain Lionに切り替えた。

アプリケーション毎にフルスクリーン表示ができるってことは、作業に集中できそう。そして、三本指で切り替えられるし便利、これは重宝する!と思ったら、メニューバーが非表示で、時間が分からない。時報を音声で外でマシンを使ってる時、大体の時間を知りたいので、時報できるようにしてみた。

やったこと

terminal-notifierのインストール

terminal-notifierはコマンドラインで通知できるruby製クライアント。パッと見た感じかなり重宝しそうなgemですね。

$ [sudo] gem install terminal-notifier

使い方をざっと書くと

$ terminal-notifier -[message|group|list] [VALUE|ID|ID] [options]
-message VALUE - 本文
-title VALUE - タイトル
-subtitle VALUE - サブタイトル
-group ID - 通知グループの指定。IDが同じ通知が重複した場合、一つの通知にまとめる。
-remove ID - 指定したIDの通知をNotification Centerから消す。
-list ID - 指定したIDの通知の内容を詳しくをまとめて表示。

と言う物。べんりですなあ。

スクリプトの準備

launchdから定期的に呼び出すので、下記のようにスクリプトを~/bin/time_signal.shとして作成しておきます。

/usr/local/opt/rbenv/shims/terminal-notifier -group time_signal -remove time_signal -message $(date +%H:%M)になりました -title 時報 > /dev/null

僕はrbenvを使っているので、terminal-notifierのパスが上記のパスになってます。ご自分の環境にあわせて適切に設定してください。

launchdの設定

~/Library/LaunchAgentsの下に、下記の設定ファイルを作りましょう。ファイル名は「[launchctlに登録するID].plist」という形式です。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>ファイル名で指定したlaunchctlに登録するID</string>
    <key>ProgramArguments</key>
    <array>
      <string>絶対パスでtime_signal.shを指定</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/tmp</string>
    <key>StartCalendarInterval</key>
    <dict>
      <key>Minute</key>
      <integer>0</integer>
    </dict>
    <key>StandardOutPath</key>
    <string>/dev/null</string>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
  </dict>
</plist>
launchctlに登録する
launchctl load [launchctlに登録するID]

これで時報が表示されるようになります。

時報の表示時間を変更したい時

[launchctlに登録するID].plistファイルのStartCalendarIntervalの値を変更し、

launchctl unload [launchctlに登録するID]
launchctl load [launchctlに登録するID]

と読み込み直しましょう。