Snow Leopardになって便利になったものの一つとして、Automatorがあります。

たとえば、選択された文字列を Perl として実行しその結果を置き換えるサービスは、こんな簡単に作れます。

eval-as-perl

Rubyなら、こう。

eval-as-ruby

ところで、メニューにあるshell以外のプログラムを指定することは出来るのでしょうか?

例えば、/usr/bin/perlではなく/usr/local/bin/perlを指定したい、あるいは自分のホームディレクトリーにインストールした Ruby 1.9.1 を使いたいという時にはどうしたらよいのでしょうか。

やり方は、二通りあります。

一つはスクリプトを別に書いて、そのスクリプトを/bin/shなどを経由して実行するやり方。

eval-as-ruby

そしてもう一つは、以下の方法。

eval-as-ruby

  • shellには/usr/bin/perlを指定
  • exec qw{/Users/dankogai/ruby19/bin/ruby -e}, <<'RUBY', @ARGV;RUBYで実行スクリプトをサンドイッチ

なぜこうするかというと、実はAutomator自体が、スクリプトをこのやり方で実行しているから。実行用スクリプトがどこかに保存されているのではなく、ワンライナーと同じARGV経由でスクリプトを都度渡しているのです。

これだけ知っているだけでも、Serviceは簡単に作れます。似たようなことは今までもvimやemacs、CotEditorといったアプリケーション単位でも出来ていましたが、Snow LeopardからはServiceをサポートしている全てのアプリケーションからこれを利用できます。Stickiesからすら利用できちゃうのです。

というわけで、FirefoxのServicesサポートマダーとぐちりつつ本entryを締めます。

Enjoy!

Dan the Automator