MacOSX
Alfred
Logophile

Alfred 2からLogophileを検索するworkflow

More than 3 years have passed since last update.

現時点で最も優れた串刺し辞書検索ソフトウェアLogophileをMacのランチャーAlfred 2から検索するworkflowを作成しましたので、Githubで公開しました。

このworkflowを利用するには、Alfred 2の他に有償のPowerpackを購入する必要があります。環境はMac OS X Mavericskでのみ確認しています。


開発の経緯

いろいろ調べた結果、Logophileは残念ながらAppleScriptのScripting Dictionaryを持っておらず、Alfredからまともにコントロールする方法がないように思えました。

そもそもAppleScriptをいじるのは15年ぶりだったこともあり、それを確認するためにどこを調べればよいのかを調べるのに多大な時間を要してしまいましたが、「AppleScriptエディタ」のウィンドウ>ライブラリを開き、プラスマークをクリックしてアプリケーションを追加してみれば、Scripting Dictionaryを持っているかどうかがわかります。その結果、LogophileにはScripting Dictionaryがないことをやっとのことで確認できました。

しかしまだ諦めきれません。LogophileはMacの「サービスメニュー」から検索することはできます。もしかしたら、AppleScriptからサービスメニュー経由でLogophileにテキストを送り込むことができないだろうかと思い、一日かかってもこれといった方法がネットで見つからず、もはやだめかと諦めていました。

ところが今日になって以下の記事を見つけ、ようやっとworkflow作成の目処がたちました。ここではAppleScriptからシェル経由でRubyを呼び出し、その中でさらにAppleScriptを呼ぶというややこしい構造になっています。

しかし今度は肝心のdo script行でエラーになってしまいます。困っていたところ、今度は以下の記事を見つけました。

要するに、require osx/cocoaを利用するにはシステム付属のRuby 1.8を明示的に呼びださなければならないというのです。rbenvなどでインストールしたRubyからは使えないので、最終的に以下のようなコードになりました。

on alfred_script(q)

set menuTitle to "Logophile"
set theText to q

set theScript to "require 'osx/cocoa';
p = OSX::NSPasteboard.pasteboardWithUniqueName;
p.setString_forType(ARGV[1],OSX::NSStringPboardType);
OSX::NSPerformService(ARGV[0], p);"

do shell script "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -e " & quoted form of theScript & " " & quoted form of menuTitle & " " & quoted form of theText
end alfred_script

切り貼りだらけのため、AppleScriptとシェルとRuby 1.8が入れ子になってしまっていますが、そのうちもう少しきれいなものにしたいと思います。

いずれLogophileがAppleScriptに対応してくれれば、リストを取り出してAlfredで表示するということもできるようになるかもしれません。


追記

Mac OS X YosemiteではRuby 1.8自体が削除されたとのことので、このworkflowはこのままではYosemiteでは動作しないことが確定しました。