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")))