Automator ってなんか超高機能なマクロみたいなイメージがありますが、とても便利なのでご紹介。
もともとは、会社の上司が Windows から Mac に移行したのだけれど、"秀丸みたいに選択範囲を ruby で evalできないの" とおっしゃっており、しかも Emacs は微妙とのことなので、Automator でどうにかしてみた。Service でできるんじゃないかねと教えてくれた同僚に感謝。
追記(2013/02/24)
デバッグ方法を別エントリに書きました
できること
文字列選択して Ctrl+= を押すと選択文字列が ruby で実行されます。編集可能なテキストエリアならだいたい何処でも。
作り方
- アプリケーション ディレクトリにある Automator を起動します。
- 新しくサービスを作ります
- ユーティリティ > "シェルクスクリプトを実行"というアクションを選んで右のあいてることろにドラッグアンドドロップ
- "ruby -Ku" と書く
- ドロップダウンリストで選べるオプションは画像のとおりに。
- 名前をつけて保存する。たとえば "doRuby"
- ショートカットーキーを設定する
- "システム環境設定" を開いて、"キーボード"項目の、キーボードショートカットタブをクリック
- 左カラムのサービスを選ぶと、さっき保存した右カラムに doRuby があるので、すきなショートカットキーを設定
- テキストエリアで、ruby のコードを選択する。さっき決めたショートカットキーを押す。コードが実行される。
- Ctrl-z で動作を取り消して、もとのコードに戻せるのもポイント高いですね。
ポイント
- シェルスクリプトの標準入力になんでも渡せる。ファイル名を渡したりも出来る。ほとんどなんでも出来るじゃん。
- つくったサービスは、コンテキストメニュー出るようになる!
- つくったサービスは、ショートカットキーがセットできる。
- Ctrl-z でやりなおしできる。
ショートカットキーが設定できるのが、とても重要で、画面ロックのショートカットキーも簡単にできます。
画面ロックの作り方
- 途中まではさっきの例と同じ
- こんな感じで"スクリーンセーバーの開始" をするだけのサービスを作成
- 名前つけて保存
- 上の例と同様に、ショートカットキーを設定
とすれば、画面ロックのための service になります。
発展型
スクリーンショットを撮って、fotolife に upload する。という gyazo みたいなスクリプトが一時期はやりましたが、これもショートカットキーから呼べるとかなり便利です。
use strict; use warnings; use Config::Pit; use WebService::Hatena::Fotolife; use IPC::Run qw(run); my $conf = Config::Pit::get("hatena.ne.jp"); my $file_name = $ARGV[0]; my $tmp_filename = '/tmp/screencapture.png'; if ($file_name || run(['screencapture', '-i', $tmp_filename])) { my $hatena = WebService::Hatena::Fotolife->new; $hatena->username($conf->{user}); $hatena->password($conf->{pass}); my ($date) = $hatena->createEntry( filename => $file_name || $tmp_filename, folder => 'work', ) =~ /(\d{14})$/; my $url = sprintf "http://f.hatena.ne.jp/%s/%s", $conf->{user}, $date; run(['open', $url]); }
こんなスクリプトを書いておいて、
こうやってサービスを作ると、ショートカットキー一発で、スクリーンショット取得と fotolife への upload まで完了できます。