ミニバッファに表示されるエラー詳細:
Suspicious state from syntax checker haskell-hlint: Checker haskell-hlint returned non-zero exit code 1, but no errors from output: hlint.exe: Couldn't find file: /cygdrive/c/Users/Hiroyuki/tmp/flycheck_hello.hs
MinGW関連コマンドで"/cygdrive"から始まるパスを解釈できない問題の回避方法:
"/cygdrive"から始まるパスをMinGWによってビルドされたバイナリ(hlint)からも解釈できるようになれば、この問題は回避できるのでは?と考え、mklinkを用いて以下の手順でシンボリックリンクを作ってみました。C:\> cd \ C:\> mkdir cygdrive C:\> cd cygdrive C:\cygdrive> mklink /d C C:\これが大成功!"C:\CYGDRIVE\C"に"C:\"へのシンボリックリンクを作っておくことでcygwin上の"/cygdrive/c/xxx/yyy"といったパスがMinGW上では"C:\xxx\yyy"として解釈される状態になります。
この環境ではemacs上でflycheckが正しく動作するようになりました。
この環境はMinGW関連コマンド全般に適用可能:
この裏技はMinGW/MSYSでビルドされた任意のコマンドに適用可能なはずです。cygwin環境とMinGW環境が混在していて、MinGW/MSYS関連コマンドの実行に弊害が出ている方は是非お試しいただければ、と思います。余談:うまくいかなかった方法(cygwinのマウント機能の利用メモ):
cygwin環境において"C:"ドライブのルートを"/C"としてマウントする方法もありますが、MinGWは"/C/xxx/yyy"というパスは解釈できずNGでした。% cd / % mkdir c % mount c: /c"C:"を/C:"としてマウントできれば、と思ったのですが残念ながら以下のようなエラーになりました…。
% mkdir c: % mount c: c: mount: c:: Invalid argument
こんなのがありますよ。
返信削除http://emacswiki.org/emacs/cygwin-mount.el
http://digitalbox.jp/elisp-cygwin-mount/
お知らせありがとうございます。
削除cygwin-mount.elをインストールしておけば、Meadow(emacs)上のelisp環境上ではcygwinパスを扱えるようになる、とうことですよね。
ただ、emacsから起動される外部コマンド上(bashやgccなど)ではcygwinパスは扱えないと思われ、自分の今回の用途には使えなさそうです…。
本エントリで紹介したmklinkを用いる手順だとemacsに依存せず利用できるため、適用可能範囲が広くなっている認識です。