たぶん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で動かしておけば起きないんですよね。

コメント

このブログの人気の投稿

五十音配列付き新下駄配列

WSLでの親指シフトはどうやらMozcで実現可能と気がつくまで

親指シフト新下駄配列の可能性