たぶんCygwin版EmacsだとWindows版HaskellでのAgdaは動かない
だいぶ前にCygwin版EmacsからWindows版Haskellで動いているAgdaを使おうとして
File is missing: Searching for program, No such file or directory, /bin/bash
というエラーが出て動かないので諦めていました。
もう一つ、Windows版Emacsをコマンドプロンプトから動かすとC:\Users\kurok\AppData\Roaming\.emacs
を読んで起動するのに、CygwinからrunemacsでWindows版Emacsを起動するとエラーが出るのにも悩まされていました。前者の.emacs
と同じ内容のinit.el
を読み込んでもです。
普段はVimを使っているので、「じゃあ、Windows版のEmacsをCygwinを経由させないで動かせばいいじゃない」で解決していました。でも、本格的にAgdaをやってみようと思ったら、フォントが足りなかったり、Agdaの標準ライブラリの設定が必要になったりで、AppData
の下に設定ファイルがあるのはめんどくさくなりました。設定ファイルはいつものCygwinのHOMEに集めたいです。ということで、エラーの原因を探ってみることにしました。
Cygwin経由だと$HOME/.emacs.d/init.el
を読みにいくので、AppData
の下の.emacs
をコピーしてきて余計なところを削ってみたのですが同じエラーになります。
(load-file (let ((coding-system-for-read 'utf-8))
(shell-command-to-string "agda-mode locate")))
/bin/bash
が無いとのことなので、PATHの問題だと思いました。なので、Cygwin関係のパスを削ってみました。
PATH=`echo $PATH | sed 's/~\/bin//g;s/\/usr\/local\/bin//;s/\/usr\/bin//'` runemacs
しかし、同じエラーが出る。
/bin/bash
が問題なんだからshell-command-to-string
がらみだろうということでinit.el
を
(shell-command-to-string "")
にしてみたら同じエラーが出ました。犯人はこいつです。
"shell-command-to-string"でぐぐってみるも、詳しい仕様は出てこない。bashをハードコーディングで指定しているわけはないから、どこかで設定しているはず。
$ env | grep "bash"
SHELL=/bin/bash
で見つかりました。
SHELL= runemacs
で起動するようになりました。
こうなるとCygwin版Emacsで動くのではないかと気になります。しかし、
File is missing: Cannot open load file, No such file or directory, C:\cabal\store\ghc-8.10.7\Agda-2.6.2.2-44283e0a92e767b3a6754f539efccb0afbc41964\share\emacs-mode\agda2.el
となります。Cygwin版なのにWindowsのパスなのがだめだろうから、
(load-file (let ((coding-system-for-read 'utf-8))
(shell-command-to-string "cygpath `agda-mode locate`")))
でパスを変更してみるも、
File is missing: Cannot open load file, No such file or directory, /cygdrive/c/cabal/store/ghc-8.10.7/Agda-2.6.2.2-44283e0a92e767b3a6754f539efccb0afbc41964/share/emacs-mode/agda2.el
というエラーでだめ。
ぐぐると行末の改行を落としている例があるので、
(load-file (let ((coding-system-for-read 'utf-8))
(replace-regexp-in-string "[\n\r]+$" ""
(shell-command-to-string "cygpath `agda-mode locate`"))))
とすると起動しました。やったー!
しかし、Agdaのファイルを開いてC-c C-l
を押すと、
An internal error has occurred. Please report this as a bug.
Location of the error: __IMPOSSIBLE__, called at src/full\\Agda\\Utils\\FileName.hs:60:20 in Agda-2.6.2.2-44283e0a92e767b3a6754f539efccb0afbc41964:Agda.Utils.FileName
とエラーが出ました。これはめんどくさそうなやつ。ということで表題の「たぶんCygwin版EmacsだとWindows版HaskellでのAgdaは動かない」ということになりました。
こういうゴタゴタはHaskellもEmacsもWSLで動かしておけば起きないんですよね。
コメント
コメントを投稿