auto-complete.el 1.0aでlambdaで定義したコマンドが使えない
2009-11-20 追記
以下の変更は、 322dcb5a で本家にmergeされました。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
auto-complete.elのversionを 1.0a(http://github.com/m2ym/auto-complete)に上げたのですが、
(global-set-key (kbd "=") (lambda () (interactive) (insert "=")))上のようにlambdaで定義されているコマンドを実行すると、エラーが出るようになってしまいました。
軽く追ってみたところ、ac-trigger-command-pのなかのsymbol-nameにlistが渡るのが原因みたいです。具体的には、以下のテストが通りません。
(dont-compile (when (fboundp 'expectations) (expectations (desc "ac-trigger-command-p retums nil if command is lambda") (expect t (let ((command-fn (lambda () (interactive) "hi!"))) (when (commandp command-fn) t))) (expect nil (let ((command-fn (lambda () (interactive) "hi!"))) (ac-trigger-command-p command-fn))))))コマンドを返す関数( (lambda () (interactive) ...) を返す関数)をつかってコマンドを定義するとこのような問題がでるかも、と思いました。
稚拙、http://github.com/imakado/emacs-smartchr でもこの方法でコマンドを定義しています。とりあえずの回避策として、ac-trigger-command-pにlistで定義されたコマンドが渡って来た場合に、nilを返すようにしてみました。
http://github.com/imakado/auto-complete
githubにコードがあったので、forkしてpushしました。実は久しぶりにauto-complete.elのバージョン上げたのですが、凄く便利になっていて感激しました。(incf m2ym )
k1LoWさんの "動かないと業務に支障がでる" 発言にも納得です。