Finder から一発で Terminal 上の Emacs を起動する

わたしゃゴリゴリの Terminal 使いですが、何がなんでもキーボード操作じゃなきゃやだ、というわけでもなくて。マウスでポチポチしてたりするときだって当然あるわけです。ファイルをネットワーク越しに転送してきてとりあえず何か開いてみたい、みたいなときとかね。Terminal で cd して less hoge とかすればいいわけですけど、なんとなくドラッグ&ドロップで開きたいときだってあるわけですよ。例え常に Terminal ウィンドウが開いていたとしてもです。開いてる Terminal に emacs と打って目的のファイルをドロップしてフォーカスを Terminal に持ってきてリターン押すだけやん!と言われてもです。

そんなときにね、実は OSX にはコレ!っていうページャやエディタってないわけですよ。どうもどれもこれもイマイチでね。日本語の自動判別がダメだとか設計が古すぎるとか対応しているプログラミング言語が少ないとかそもそもプレインテキストが扱えないだとか、不思議な現象に悩まされることが多いわけです。一応 mi を常備してますけど、なーんかしっくりはこないんですよ。

で、Emacs 使いとしてはじゃあ Carbon Emacs にすれば?みたいな気もしてくるわけですが、Carbon Emacs は先日述べた理由で使いたくない。つか標準の Emacs のほかに Fink の Emacs が入っているのに、そのうえ Carbon Emacs 入れろってか。なんでただでさえ巨大な Emacs を3つも入れないかんのじゃ。

さてどうするか。

閃いたのが「Terminal 上で Emacs を使って目的のファイルを開くって作業をコンテクストメニューとかドラッグ&ドロップでできたらステキ」作戦。

じゃあ、ということで wrapper になりそうなアプリを探すんだが、これが思うような動作をするものってないのね。Terminal にこれこれこう言うコマンドを与えて実行、っていう指定ができて、かつドロップされたファイルを引き数で与えることができればそれでいいのに。1

うーん。AppleScript を使えばできそうだなぁとは思うけど、あれ書くの楽しくないし、もう書いたの1年以上前だし…。

[2006-09-30 追記]でけた。ドロップレットにするには Xcode で Droplet プロジェクトにせんといかんのね。たったこれだけなのに大げさだなぁ。

-- drop-to-emacs

on idle
  (* Add any idle time processing here. *)
end idle

on open names
  set filenames to ""
  repeat with str in names
    copy filenames & " \"" & (POSIX path of str) & "\"" to filenames
  end repeat
  tell application "Terminal" to do script ("emacs" & filenames)
  quit
end open

on idle のときに何か書くべきなのかとかさっぱり分かっていないので放置。

動作としては

  1. 新しい Terminal を起こして
  2. そこで emacs を使って全部のファイルをいっぺんに開く

ただし、Terminal が起動していない場合は、Terminal を起動した際に自動的に作られる新しいウィンドウとは別に自分で Terminal ウィンドウを作成するので、

2個のウィンドウができる

という不細工な動作をする。まぁいいかーと。Terminal そのものはいつも起こしてるから。

しかし、、、AppleScript を書くのは気持ちよくない。いろんな予約語(演算子も予約語みたいなもんだ)があるのに、それいっぺんに確認できるリファレンスないし。つか XCode なんだからリファレンスとか補完とか自分でやってくれりゃいいのになんもしてくんないし。なんか設定足りんのかなぁ。

ま、とにかくできあがったアプリを Dock に置いて完成。いいじゃないの。いーじゃないの。

  1. Terminal に指定コマンドを与える設定を Terminal そのものから「名前を付けて保存」できるんだけど、このアイコンにテキストファイルをドロップすることはできない。 

More