>>>> In <28zp1g63vu.fsf(a)kchisa.ga.sony.co.jp>
>>>> Katsumi Yamaoka <yamaoka(a)ga.sony.co.jp> wrote:
[...]
山岡> と言うのは keymap を copy するときに
山岡> (let ((default-binding (keymap-default-binding KEYMAP))
山岡> (new-keymap (copy-keymap KEYMAP)))
山岡> (set-keymap-default-binding new-keymap default-binding)
山岡> (use-local-map new-keymap))
山岡> とでもするように XEmacs の方を改造すべきだと思うからです。
その後 Elips ML で守岡さんからいろいろお話しをうかがって、これは
src/keymap.c で定義されている built-in 関数 `copy-keymap' を改造して、
コピーされた keymap に元の default binding を継承させる必要があること
に気が付きました。実際 FSF Emacsen ではそうなっています。
はて C はぜんぜんわからないからどうしたものかなあ、と思っているうちに
以前に xemacs-patches に送ったパッチが egg-its に当てられたと Steve さ
んから連絡が来て、とうとう観念した次第です。(^^;;)
いちおう elisp 的にはこういうこと↓ができるようになったのですが、
(let ((keymap (make-sparse-keymap)))
(set-keymap-default-binding keymap 'ignore)
(keymap-default-binding
(copy-keymap keymap)
))
=> ignore
src/keymap.c の以下の改造が正しいかどうか、どなたか添削していただけな
いでしょうか?
DEFUN ("copy-keymap", Fcopy_keymap, 1, 1, 0, /*
Return a copy of the keymap KEYMAP.
The copy starts out with the same definitions of KEYMAP,
but changing either the copy or KEYMAP does not affect the other.
Any key definitions that are subkeymaps are recursively copied.
*/
(keymap))
{
/* This function can GC */
int command;
keymap = get_keymap (keymap, 1, 1);
command = XKEYMAP (keymap)->default_binding;
keymap = copy_keymap (keymap);
XKEYMAP (keymap)->default_binding = command;
return keymap;
}
;; 守岡さんからは egg.el の menu:select-from-menu を作り直すという命題
;; もいただいているのですが、これは別途 minibuffer-menu.el のようなも
;; のにまとめることにして、Egg からはそろそろ足を洗いたいと思っていま
;; す。
--
Katsumi Yamaoka <yamaoka(a)jpl.org>