Add multiple inheritance to keymaps.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 2 Jul 2011 04:27:41 +0000 (00:27 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 2 Jul 2011 04:27:41 +0000 (00:27 -0400)
commit3349e122e2ed4e1e96851bdf84ce8ae4732b6420
treeac1309f41e4c5dc26ddd8c7f313ece238fa65809
parent3de63bf809c2a36a5eae8e7383b2590c5ab1bcf7
Add multiple inheritance to keymaps.
* src/keymap.c (Fmake_composed_keymap): New function.
(Fset_keymap_parent): Simplify.
(fix_submap_inheritance): Remove.
(access_keymap_1): New function extracted from access_keymap to handle
embedded parents and handle lists of maps.
(access_keymap): Use it.
(Fkeymap_prompt, map_keymap_internal, map_keymap, store_in_keymap)
(Fcopy_keymap): Handle embedded parents.
(Fcommand_remapping, define_as_prefix): Simplify.
(Fkey_binding): Simplify.
(syms_of_keymap): Move minibuffer-local-completion-map,
minibuffer-local-filename-completion-map,
minibuffer-local-must-match-map, and
minibuffer-local-filename-must-match-map to Elisp.
(syms_of_keymap): Defsubr make-composed-keymap.
* src/keyboard.c (menu_bar_items): Use map_keymap_canonical.
(parse_menu_item): Trivial simplification.
* lisp/subr.el (remq): Don't allocate if it's not needed.
(keymap--menu-item-binding, keymap--menu-item-with-binding)
(keymap--merge-bindings): New functions.
(keymap-canonicalize): Use them to refine the canonicalization.
* lisp/minibuffer.el (minibuffer-local-completion-map)
(minibuffer-local-must-match-map): Move initialization from C.
(minibuffer-local-filename-completion-map): Move initialization from C;
don't inherit from anything here.
(minibuffer-local-filename-must-match-map): Make obsolete.
(completing-read-default): Use make-composed-keymap to combine
minibuffer-local-filename-completion-map with either
minibuffer-local-must-match-map or
minibuffer-local-filename-completion-map.
etc/NEWS
lisp/ChangeLog
lisp/minibuffer.el
lisp/subr.el
src/ChangeLog
src/keyboard.c
src/keymap.c