gnupackのCygwinを指定したディレクトリで開く
先日、 chere でエクスプローラからCygwinを開く設定を付けましたが、Emacsで作業中にカレントディレクトリをCygwinで開きたい場合があり、その方法を調べてみました。
やり方
$ cygpath -w "$(pwd)" | tr -d '\n' > /dev/clipboard && /root/startup_cygwin.exe
Windowsの clip コマンドでも良かったのですが、文字化けすることがあったので変更。
間に tr を入れているのは、 cygpath の出力結果に含まれる最後の改行があると、移動がおこなわれなかったためです。
この設定に気づいたきっかけ
gnupackの設定ファイルを眺めていたときに、Chdir_With_Clipboard という項目を発見。
もしかして、クリップボード上のパスへのディレクトリ移動フラグ?と気付いたのがきっかけで、それならこんなことできるかも?と試してみました。
/root/startup_config.ini
[startup_cygwin.exe]
Cmdline_Image = "%term.exe%" -e "%bash.exe%"
Application_Id = Mintty
Init_Current_Dir = %HOME%
Chdir_With_Clipboard = yes
Synchronous_Run = no
Load_Private_Font = yes
Tune_Cygwin_Mount = yes
Tune_Cygwin_Profile = yes
Convert_Cygwin_Path = yes
Emacsから呼び出す
Lispはよくわからないので、シェルスクリプト経由で開くことにしました。
こんな感じのスクリプトをPATHが通った場所に設置。
Open current directory in Cygwin
それをEmacsから呼び出す関数を用意して、適当なキーバインドを割り当て呼び出しています。
https://github.com/umi-uyura/dot.emacs.d-gnupack/blob/master/lisp/win-open-folder.el
(defun open-cygwin() "cyghere CURRENT-DIRECTORY" (interactive) (process-query-on-exit-flag (start-process-shell-command "open folder in Cygwin" nil "cyghere")))