Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

ruby-electric.elとanthy.el(解決)

9/16の日記で,ruby-electricとanthyの併用ができない件を書いたのですが,解決しました。id:rubikitchさんに教えていただきました。ありがとうございます。

原因と解決策は以下の通りです。
一般にマイナーモードはロード順によって干渉しあう。以下のような設定にしていたので,

(load-library "anthy")
(setq default-input-method "japanese-anthy")

(require 'ruby-electric)
(add-hook 'ruby-mode-hook
          '(lambda ()
             (ruby-electric-mode t)
             ))

(mapcar 'car minor-mode-map-alist) を評価すると

(view-mode ruby-electric-mode compilation-minor-mode compilation-shell-minor-mode anthy-minor-mode)

と表示され,ruby-electric-modeがanthy-modeよりも前にあります。minor-mode-map-alistはマイナーモードによるキーバインドを制御する変数で、先頭のものほど優先されます。

解決策としては,

  1. ruby-electric-modeとanthyのロード順を入れ替える
  2. 以下の式を評価する。以下は,ruby-electric-modeの優先順位を最下位にするものです。
(let ((rel (assq 'ruby-electric-mode minor-mode-map-alist)))
  (setq minor-mode-map-alist (append (delete rel minor-mode-map-alist) (list rel))))

後者の方法で解決しました。