Lambdaカクテル

Common LISPが好きなWeb屋さんです 自宅サーバやフロントエンドもできます

ENSIMEで(cyclic-function-indirection char-valid-p)エラー

EmacsScala入力支援ライブラリであるENSIMEをセットアップしていたら、Emacsが次のようなエラーを吐いた。

.
.
.
(cyclic-function-indirection char-valid-p)

最初はENSIMEのバグかなにかと必死で考えてみたが、検索しても一件もヒットしないので困っていたが、結局これはDDSKKの仕様とバイトコンパイルの罠?であった。
どうやらEmacsのバージョンを22.xから24.xにアップグレードしたことが影響したらしく、DDSKK内での処理に使われるマクロがバージョンにより分岐しており、さらにこの.elファイルがバイトコンパイルされていたことがエラーの引き金となっていた。

エラーの過程

  1. ENSIMEがキーボード拡張の為にkbd関連の関数をコールする
  2. DDSKKがこれをマクロでオーバーライドしているのでこっちが先にコールされる
  3. DDSKKのEmacsバージョン依存部分がバイトコンパイルされており、さらにEmacsのバージョンが変わっているのでバージョン判定が不正にパスされる
  4. 関数が循環参照してcyclic-function-indirection char-valid-pが吐かれる

エラーの解決法

/usr/share/emacs/site-lisp/skk/(ここはDDSKKへのパスに読み替える)skk-macs.elcを削除する
skk-macs.elを削除してはいけない!)

これを実行したところ、めでたくENSIMEがセットアップされました。
よいEmacsライフを!