Cygwin(CygTerm)を任意の場所から開く
CygwinをWindows上の任意のパスで開く場合、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がよろしくやってくれる。
エクスプローラから開く
自分はキーボードファイラーを使っているので正直どうでもいいんだけど、世間的にはやっぱりエクスプローラから開きたいのかなぁ、ということで登録の仕方も調べてみた。
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"
などと指定する(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どっちがいいのかはよくわからない。この辺のプレースホルダ情報ってどこに載ってるんだろう。