[Mew-dist 05221] Re: local-map

SAKAI Kiyotaka ksakai at example.com
1998年 6月 30日 (火) 13:52:39 JST


>> In article <19980629063322V.kazu at example.com>, Kazu Yamamoto (山本和彦) <kazu at example.com> writes:

> ヘッダで日本語が入力できない理由が分りました。
> おそらく SKK でも同様だと思いますが、かんなではフェンスモードに入ると
> local-map を書き換えて、もう一度入力されたキーに束縛されている関数(多
> くの場合は新しい local-map にマッチした関数)を呼び出します。

skk では、skk-10.x で Emacs 18 を捨てたときに minor-mode-map-alist を
使うようになりましたので、問題はなくなりました。

> というわけで、property の local-map を設定していると、かんなが設定した 
> local-map が無視されます。試しに canna.el で local-map の設定と同時に
> property の local-map を nil にするコードを書くとうまくいきました。

Emacs-20.2 に付属の leim や EGG-4.0 (beta test 中) でも駄目でした。

こっちはレポートしておきます。

> 結論:property の local-map を気にせずに書かれたコードが悪い

property の local-map は、use-local-map で指定したキーマップを置き換え
るようになっていますので、Canna が use-local-map した後から Mew が
use-local-map してキーを置き換えているとみなすと、このこと自体が問題と
は言い切れないと思います。

skk の ML でも過去に use-local-map を使う是非について議論があったので、
メールを読み直してみたところ、

・use-local-map は major mode で使用する目的で設定されたので、本来は、
  FEP がキーを奪い取る目的で使用するべきものではなかった。

・しかし、Emacs 18 の頃は他に手段がなかったため、use-local-map を使う
  インプリメントを採ったのは仕方がなかった。

・Emacs 19 以降ではちゃんとした機能が用意されたので、
  minor-mode-map-alist か overring-local-map を使うのが正しい。

ということが分かりました。

ですので、結論は「majar mode でもないのに local map を使うのが悪い」が
正しいと思います。

> (解決案1) property の local-map を気にせずに書かれたコードをすべて直し
> てまわる。

> (解決案2) Mew を昔に戻す。

(解決案3) use-local-map を使った書かれたコードを minor-mode-map-alist 
          か overring-local-map を使って書き直してまわる。

が根本的な解決方法だと思います。

あと、overring-local-map は変数が 1つしかないため、すでに 
overring-local-map が設定されているときに overring-local-map を設定し
直すとどうなるかなどの問題について考えなくてはいけないので、インプリメ
ントは minor-mode-map-alist を使うよりは少し面倒になるかと思います。
-- 
酒井 清隆 (E-mail: ksakai at example.com)



Mew-dist メーリングリストの案内