Finderから指定したフォルダでiTermを開く

このエントリーをはてなブックマークに追加

Finderで開いているフォルダでターミナル(私の場合iTerm)を開きたくなることはよくあると思います。Windowsであればshift + 右クリックコマンドウィンドウをここで開くというメニューが表示されるのですが、OSXでは標準でそのような機能がありません。

Automator

OSXにはAutomatorというアプリがあり、いろんなタスクの自動化ができます。中でもYosemiteからAppleScriptだけでなくJavaScriptが実行できるようになったのが非常におもしろい!しかしながらドキュメントが少なすぎてちょっとつらい。手探りでiTermを開くスクリプトを作りました。

Script Editor

まず、iTermにどのようなAPIが用意されているのかScript Editorで調べる必要があります。「ファイル>用語説明を開く」でiTerm.appを選択することでAPIを調べることができます。今回はmake, launch, writeを使うことで要件が満たせそうです。

make

make method : Make a new object.
  make
    new: type : The class of the new object.
    [at: location specifier] : The location at which to insert the object.
    [withData: any] : The initial data for the object.
    [withProperties: record] : The initial values for properties of the object.
    → specifier

launch

launch method : Launches a default or saved session
  launch specifier : the object for the command
    session: Text : Name of session to be launched
    → Session

write

write method : Writes text or file contents into a session
  write specifier : the object for the command
    [contentsOfFile: Text] : File to be written
    [text: Text] : Text to be written

実践

スクリーンショット 2015-05-04 15.45.20

実際に作ってみましょう!新規Automatorを作成して上のキャプチャみたいにサービスを選択します。

スクリーンショット 2015-05-04 15.24.57

  1. JavaScriptを実行を選択
  2. フォルダに対して実行したいのでフォルダを選択
  3. 実際に実行するスクリプトを書きます
function run(input, parameters) {

    filePath = Path(input);
    termApp = Application('iTerm');
    term = termApp.make({new: 'terminal'});
    s = term.launch({session:'default'});
    s.write({text: 'cd "' + filePath + '"'});

    return;
}

先に調べたドキュメントの通りにAPIを使ってみてopen iTerm hereとして保存します。サービスとして登録されていることがわかります。

スクリーンショット 2015-05-04 15.25.30

これで一応開いたフォルダの場所でiTermが開かれるようになります。ただ、初回起動時はデフォルトのセッションが開かれてしまうのがちょっと気に入らない。。。

Written on May 4, 2015
このエントリーをはてなブックマークに追加