Terminalで新しいタブを現在のディレクトリで開く

TerminalではCommand+Tで新しいタブを開くことが出来ますが、新規タブはホームディレクトリで開かれてしまい、Screenのように現在のディレクトリで開いてくれません。ほとんどの場合はカレントディレクトリで開いてくれる方が便利なので、それを実現する方法を模索しました。


結果から先に言うと「"pwd"で出力するフルパスを覚えておいてCommand+Tと押した後に"cd"コマンドでそれを入力する」というAppleScriptを書いてTerminalからコマンドで呼び出すようにしました。この方法に決定した理由は以下の通りです。

  1. TerminalなのでAppleScriptが動く環境
  2. AppleScriptの動作は速い
  3. AppleScriptは書いたことないけど便利そうなので勉強しとくと今後貢献してくれそう
  4. スクリプトをコマンドで呼び出すだけ、というのが理解しやすくて安心

AppleScriptの記述と配置

TerminalでAppleScriptを呼び出すには、osascript(/usr/bin/osascript)コマンドを利用します。
なお、2011/02/21現在のSnowLeopard(10.6)ではosascript実行時にAdobe関係のライブラリが警告を出力する場合があるため、実行時にAdobeっぽい警告が出るなーやだなーという人はAdobeからパッチをダウンロードしてください。


下記のようなスクリプトを書いて実行権限を与えます。"chmod +x hoge.applescript"とかですね。AppleScriptは初経験でしたが雰囲気Rubyっぽい構文ですね。

#!/usr/bin/osascript

# createTabAtCurrentDirectory.applescript
# input "Command + T" then cd to current directory in Mac OSX Terminal.app

on run argv
  set cmd to "cd" & " " & do shell script "pwd"
  tell application "Terminal"
    activate
    tell application "System Events"
      tell process "Terminal" to keystroke "t" using command down
    end tell
    do script with command cmd in selected tab of the front window
    
    # erase scroll buffer (Command + K in Terminal.app)
    tell application "System Events"
      tell process "Terminal" to keystroke "k" using command down
    end tell

    return
  end tell
end run


あとはコマンドから"osascript hoge.applescript"とか呼び出すだけですね。ちなみに自分の場合は~/Dropbox/Script/というディレクトリに便利系スクリプトを置いて管理しているので、~/.bashrcに以下のようにaliasを記述してコマンド"t"で呼び出せるようにしています。

alias t='~/Dropbox/Script/createTabAtCurrentDirectory.applescript'

その他

前回KeyRemap4MacBookという奴を使ったのでそれを利用して「TerminalでCommand+Kを入力すると"pwd | pbcopy"→Command+T→"pbpaste | cd"を入力」みたいなキー設定にしようかななんて考えていたのですが、シェルスクリプトとかである程度省略しても気持ち悪すぎるかなと思って途中で止めました。ちなみにその時に書いて.bashrcの一部があって別の用途で使えるかもしれないので載せておきます。

alias g='growl -H localhost -m'         # "g"に文字列を渡すとGrowlで通知します。ruby-growlが必要です
alias pp='pwd | pbcopy ; pbpaste | g'   # "pp"でカレントディレクトリ名をコピーしてgrowlでも通知します
alias cdp='cd `pbpaste`'                # "cdp"でコピーしたディレクトリへ移動できます。新しいタブを開いた後などにどうぞ
                                        # Finderでフォルダを選択してコピーした後とかにもどうぞどうぞ