(追記: 2015/2/25 今見ると変なコード書いてるので書き直したいけど書き直さないでしょうね)
Rubyで通知させたかったので簡単な方法を調べました。
Rubyっていうか、ただのAppleScriptです。
AppleScript
Marvericksから、AppleScriptで通知センターに通知できるようになりました。
display notification "めっせーじ"
オプションとしてタイトル、サブタイトル、音を指定できます。
それ以外は変更できません。アイコンとかも。
display notification "めっせーじ" with title "たいとる" subtitle "さぶたいとる" sound name "Purr"
通知センターではこんな感じ。消去は×ボタン。
クリックするとAppleScriptエディタが立ち上がります。(変更不可)
使い方は「AppleScriptエディタ」の以下を参照。
[ ファイル > 用語説明を開く > StandardAdditions.osax > User Interaction > display notification]
display notification v : Display a notification. At least one of the body text and the title must be specified.
display notification [text] : the body text of the notification
[with title text] : the title of the notification (default is the name of the calling application).
[subtitle text] : the subtitle of the notification
[sound name text] : the name of the sound to play
Ruby
で、Rubyから利用する簡単な方法はシェルからosascript
コマンドを実行する方法と思います。
Rubyみたいに-e
オプションをつければ、文字列をAppleScriptとして実行できます。
osascript -e 'display notification "hello"'
「``」を使えば、そのままの形でRubyで実行可能。
`osascript -e 'display notification "hello"'`
メソッドにしてみます。
こっちはコマンドの実行を「``」でなくsystem
メソッドにしました。
def notification(message, title:"Ruby", subtitle:"", sound:"")
[message, title, subtitle, sound].each{|arg| arg.gsub!(/"/, '\\\\\"')}
scpt = 'display notification "%s"' % message
scpt << ' with title "%s"' % title
scpt << ' subtitle "%s"' % subtitle unless subtitle.empty?
scpt << ' sound name "%s"' % sound unless sound.empty?
system %|osascript -e "#{scpt.gsub(/"/, '\"')}"|
end
# ダブルクォーテーション、シングルクォーテーションが問題なく使えること確認
notification %q|"I thought what I'd do was, I'd pretend I was one of those deaf-mutes."|, sound:'Glass'
AppleScriptの文字列にはダブルクォーテーションしか使えません。
だからosascriptに渡す文字列はシングルで囲おうと思ったんですが、シェルでシングルをエスケープするのがやたらめんどくさかったのでいっそぜんぶダブルにしました。
(参考: bashなどのshellでシングルクオートをエスケープする方法 - 中野智文)
動かなかった場合はコメントいただけると助かります。
sound nameについて
sound name
は省略した場合、音がなりません。
存在しない音を指定するとデフォルトの音(トライトーン)が鳴ります。
音には[システム環境設定 > サウンド > サウンドエフェクト]にある名前を指定します。
ただ、トライトーンはそこにないので、他にも指定できる音があるのかもしれません。(情報求ム)
代わりにsay "hello"
とかやって喋らせるのもいいかもです。
参考
Mavericksでは通知センターをスクリプトから使えるようになった | Blog by msyk
Mavericksでrequire 'osx/cocoa'が出来ない - rcmdnk's blog