Cygwin(CygTerm)を任意の場所から開く

CygwinWindows上の任意のパスで開く場合、chereというのを入れればエクスプローラコンテキストメニューから開けるようになるようなのだが、CygTerm経由の場合そうはいかないので工夫してみた。

パスを環境変数で渡す

カレントディレクトリを任意のディレクトリにしてCygTermを起動すればいいらしいんだけど、昨日のエントリで書いたようにCygwinの/binじゃないと上手く起動できないので、パスは環境変数で渡して.bash_profile側でcdするという方法を採る。


.bash_profileにこんな感じの設定を追加。

# Cygwin Bash Here
if [ "$OPEN_CYGWIN_FROM" != "" -a -x /bin/cygpath ]; then
  OPEN_CYGWIN_FROM=$(echo $OPEN_CYGWIN_FROM | sed 's/\(^"\|"$\)//g')
  OPEN_CYGWIN_PATH=$(/bin/cygpath -u "$OPEN_CYGWIN_FROM")
  export OPEN_CYGWIN_PATH
  cd "$OPEN_CYGWIN_PATH"
fi

環境変数OPEN_CYGWIN_FROMがあったらcygpathでCygwinから見たパス(/cygdrive/c/foo/barみたいなやつ)に変換して、そこにcdするというスクリプト
環境変数は消してもよかったんだけど、何かに使えるかもしれないので持っておくことにした。この辺はお好みで。


で、cygterm.exe起動時に-vオプションで環境変数OPEN_CYGWIN_FROMを指定してやる。

C:\cygwin\bin\cygterm.exe -v OPEN_CYGWIN_FROM="(起動時のパス)"

(起動時のパス)のところはお使いのランチャーだったりエクスプローラのシェル拡張だったりの変数を指定する。%Lとかそういうやつ。
ここは普通にC:\foo\barみたいなWindowsのパスを指定すればよい。前述のcygpathがよろしくやってくれる。

エクスプローラから開く

自分はキーボードファイラーを使っているので正直どうでもいいんだけど、世間的にはやっぱりエクスプローラから開きたいのかなぁ、ということで登録の仕方も調べてみた。

  1. HKEY_CLASSES_ROOT\Directory\shell\cygtermキーを作る。
  2. (既定)の値はメニューの表示名になるので「Cygwin Bash Here」とか適当につけておく。
  3. HKEY_CLASSES_ROOT\Directory\shell\cygterm\commandキーを作る。
  4. (既定)の値にC:\cygwin\bin\cygterm.exe -v OPEN_CYGWIN_FROM="%1"などと指定する(cygterm.exeの場所は適宜置き換えてね)。


レジストリファイルにするとこんな感じ。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cygterm]
@="Cygwin Bash Here"

[HKEY_CLASSES_ROOT\Directory\shell\cygterm\command]
@="C:\\cygwin\\bin\\cygterm.exe -v OPEN_CYGWIN_FROM=\"%1\""

これでエクスプローラ上でディレクトリを右クリックしてCygwinを開くことができるようになる。
ちなみに%1と%Lどっちがいいのかはよくわからない。この辺のプレースホルダ情報ってどこに載ってるんだろう。