少々長いタイトルになってしまいましたが、題記の通りです。cygwin-mount.el を有効化した環境で、term.el系を起動したタイミングや、特定ディレクトリへ cd したタイミングで発生します。
No such directory found via CDPATH environment variable
この現象は、ターミナル側の cd を捕捉して、Emacs 側でも cd を動かそうとして発生しますので、.emacs や init.el で、
;; term側 cd 捕捉によるEmacs側の cd を抑制(term.elで定義されている関数)
(fset 'term-command-hook '(lambda (x)))
として、ターミナル側の入力をキャッチしている関数を無効化すると、とりあえずは現象を回避できます。
この根本原因は、cygwin-mount.el によって変換される cygwin マウントポイント となるディレクトリを直接指定する場合に、末尾に / つきパスでないと変換してくれない、という仕様によるもののようです。
このようなマウントポイントの場合、
(shell-command "df -h")
ファイルシス サイズ 使用 残り 使用% マウント位置
C:/gnupack_devel-12.02/app/cygwin/cygwin/bin 230G 153G 77G 67% /usr/bin
C:/gnupack_devel-12.02/app/cygwin/cygwin/lib 230G 153G 77G 67% /usr/lib
C:/gnupack_devel-12.02/app/cygwin/cygwin 230G 153G 77G 67% /
C:/gnupack_devel-12.02/app/cygwin/local 230G 153G 77G 67% /usr/local
C:/gnupack_devel-12.02/home 230G 153G 77G 67% /home
これは上手くいきますが、
(cd "/home/")
"c:/gnupack_devel-12.02/home/"
これはエラーになります。
(cd "/home")
Debugger entered--Lisp error: (error "No such directory found via CDPATH environment variable")
signal(error ("No such directory found via CDPATH environment variable"))
error("No such directory found via CDPATH environment variable")
ad-Orig-cd("/home")
cd("/home")
eval((cd "/home") nil)
eval-last-sexp-1(t)
eval-last-sexp(t)
eval-print-last-sexp()
call-interactively(eval-print-last-sexp nil nil)
このあたりをいじるとよくなるかもしれないですが、どんな影響があるかわからないので、今回の対策としました。
cygwin-mount-activate is an interactive Lisp function in
`cygwin-mount.el'.
(cygwin-mount-activate)
Activate cygwin-mount- and cygwin-style-handling.
file-name-handler-alist
(("\\(?:\\.dz\\|\\.xz\\|\\.lzma\\|\\.lz\\|\\.g?z\\|\\.\\(?:tgz\\|svgz\\|sifz\\)\\|\\.tbz2?\\|\\.bz2\\|\\.Z\\)\\(?:~\\|\\.~[-[:alnum:]:#@^._]+\\(?:~[[:digit:]]+\\)?~\\)?\\'" . jka-compr-handler)
("\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'" . epa-file-handler)
("\\`/[^/]\\{2,\\}\\'" . tramp-completion-file-name-handler)
("\\`/\\([^[/|:]\\{2,\\}\\|[^/|]\\{2,\\}]\\):" . tramp-file-name-handler)
("\\.lnk\\'" . w32-symlinks-file-name-handler)
("^/cygdrive/[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
("^//[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
("^/[^:@]*$\\|^/|/[^/:]+\\(\\'\\|/\\)" . cygwin-mount-name-hook-function)
("\\`/:" . file-name-non-special))