Macでもmikutterに喋ってもらうためのプラグインを作ったよ
誰かが言ってた。
「Macにはaplayコマンドが無いからmikutterが喋らないけど、afplayって類似コマンドがあるよ。」
なんだけど、微妙にコマンドラインオプションが違うのでシンボリックリンク程度では、まだmikutterは僕をガン無視。
なのでcoreにあるalsa.rbをちょっと改造してプラグインを作ったっす。
下記をafplay.rbってファイル名でプラグインフォルダに置くと良いよ。
# -*- coding: utf-8 -*- # afplayコマンドで音を鳴らす Plugin.create :afplay do on_play_sound do |filename, &stop| if command_exist? "afplay" SerialThread.new { bg_system("afplay", filename) if FileTest.exist?(filename) } stop.call end end end
Automatorでアプリケーションにファイルを開かせる
やっぱり、Macのアプリをコマンドライン引数でファイルを指定して起動させる方法は無いみたい。
(UNIX的なアプローチを取れば行けるんだけど、まぁダサいよねと。)
じゃあ、アプリにファイルをドラッグアンドドロップする操作を模擬出来ればいいんじゃね?と、たどり着いたのが以下のコード。
「開く」コマンドをスクリプトから叩いてる感じですね。
on run {input, parameters} tell application "XLD" activate open item 1 of input end tell return input end run
多分AppleScripterの方々には常識なんでしょうが、自分的備忘録として。
Automatorでエラーメッセージを表示したい
Automator内に書いたシェルスクリプトでなんか都合の悪いことが起きた場合、戻り値を0以外にすることでワークフローをエラー終了させることが出来ます。
しかしながら、表示されるエラーメッセージはAutomator標準のもので、制作者がエラー要因をユーザに伝えることは出来ません。
(開発時ならstderrに要因を書いておけばエラー欄に出るんだけどね。)
それでは何とも使えないので、任意のエラーメッセージを出すアクションを書いてみました。
前のアクションの出力の1行目が***error***の場合、2行目以降をメッセージボックスに表示してエラー終了します。
そうじゃない場合は前のアクションの出力をそのまま次のアクションに渡します。
on run {input, parameters} if item 1 of input is equal to "***error***" then set message to "" set msglist to rest of input repeat with linex in msglist set message to message & linex & return end repeat display dialog message buttons {"OK"} with icon 0 error else return input end if end run
これでOK。
例えば、前のアクションがstdoutが
***error*** cueファイルをドロップしてください
だった場合、こんなメッセージボックスが出ます。
ばっちり。
(その後、前述のAutomatorのエラーが表示されるのが格好悪いですが・・・)
しっかし、Apple Scriptって文法が冗長であんま好きじゃないなぁ。