Umi Uyuraのブログ

プログラミング関連の作業ログ

gnupackのCygwinを指定したディレクトリで開く

先日、 chereエクスプローラからCygwinを開く設定を付けましたが、Emacsで作業中にカレントディレクトリをCygwinで開きたい場合があり、その方法を調べてみました。

やり方

  1. クリップボードに、Cygwinを開きたい Windowsのパス を格納する。
  2. startup_cygwin.exeを実行する
$ cygpath -w "$(pwd)" | tr -d '\n' > /dev/clipboard && /root/startup_cygwin.exe 

Windowsclip コマンドでも良かったのですが、文字化けすることがあったので変更。

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

参考