* lisp/tmm.el (tmm-prompt): Use map-keymap.
* doc/lispref/keymaps.texi (Format of Keymaps): Document the multiple inheritance format. Fixes: debbugs:12744
This commit is contained in:
parent
3a51f0eb41
commit
70edffb130
4 changed files with 29 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* keymaps.texi (Format of Keymaps): Document the multiple
|
||||
inheritance format.
|
||||
|
||||
2012-10-28 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* windows.texi (Basic Windows): Reformulate description of live,
|
||||
|
|
|
@ -210,6 +210,11 @@ Aside from elements that specify bindings for keys, a keymap can also
|
|||
have a string as an element. This is called the @dfn{overall prompt
|
||||
string} and makes it possible to use the keymap as a menu.
|
||||
@xref{Defining Menus}.
|
||||
|
||||
@item (keymap @dots{})
|
||||
If an element of a keymap is itself a keymap, it counts as if this inner keymap
|
||||
were inlined in the outer keymap. This is used for multiple-inheritance, such
|
||||
as in @code{make-composed-keymap}.
|
||||
@end table
|
||||
|
||||
When the binding is @code{nil}, it doesn't constitute a definition
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2012-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* tmm.el (tmm-prompt): Use map-keymap (bug#12744).
|
||||
|
||||
2012-10-27 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* profiler.el (profiler-report-make-entry-part): Fix help-echo
|
||||
|
|
27
lisp/tmm.el
27
lisp/tmm.el
|
@ -165,13 +165,15 @@ Its value should be an event that has a binding in MENU."
|
|||
;; tmm-km-list is an alist of (STRING . MEANING).
|
||||
;; It has no other elements.
|
||||
;; The order of elements in tmm-km-list is the order of the menu bar.
|
||||
(dolist (elt menu)
|
||||
(cond
|
||||
((stringp elt) (setq gl-str elt))
|
||||
((listp elt) (tmm-get-keymap elt not-menu))
|
||||
((vectorp elt)
|
||||
(dotimes (i (length elt))
|
||||
(tmm-get-keymap (cons i (aref elt i)) not-menu)))))
|
||||
(if (not not-menu)
|
||||
(map-keymap (lambda (k v) (tmm-get-keymap (cons k v))) menu)
|
||||
(dolist (elt menu)
|
||||
(cond
|
||||
((stringp elt) (setq gl-str elt))
|
||||
((listp elt) (tmm-get-keymap elt not-menu))
|
||||
((vectorp elt)
|
||||
(dotimes (i (length elt))
|
||||
(tmm-get-keymap (cons i (aref elt i)) not-menu))))))
|
||||
;; Choose an element of tmm-km-list; put it in choice.
|
||||
(if (and not-menu (= 1 (length tmm-km-list)))
|
||||
;; If this is the top-level of an x-popup-menu menu,
|
||||
|
@ -432,7 +434,7 @@ It uses the free variable `tmm-table-undef' to keep undefined keys."
|
|||
(or (keymapp (cdr-safe (cdr-safe elt)))
|
||||
(eq (car (cdr-safe (cdr-safe elt))) 'lambda))
|
||||
(and (symbolp (cdr-safe (cdr-safe elt)))
|
||||
(fboundp (cdr-safe (cdr-safe elt)))))
|
||||
(fboundp (cdr-safe (cdr-safe elt)))))
|
||||
(setq km (cddr elt))
|
||||
(and (stringp (car elt)) (setq str (car elt))))
|
||||
|
||||
|
@ -458,14 +460,15 @@ It uses the free variable `tmm-table-undef' to keep undefined keys."
|
|||
(eq (car (cdr-safe (cdr-safe (cdr-safe elt)))) 'lambda))
|
||||
(and (symbolp (cdr-safe (cdr-safe (cdr-safe elt))))
|
||||
(fboundp (cdr-safe (cdr-safe (cdr-safe elt))))))
|
||||
; New style of easy-menu
|
||||
; New style of easy-menu
|
||||
(setq km (cdr (cddr elt)))
|
||||
(and (stringp (car elt)) (setq str (car elt))))
|
||||
|
||||
((stringp event) ; x-popup or x-popup element
|
||||
(if (or in-x-menu (stringp (car-safe elt)))
|
||||
(setq str event event nil km elt)
|
||||
(setq str event event nil km (cons 'keymap elt)))))
|
||||
(setq str event)
|
||||
(setq event nil)
|
||||
(setq km (if (or in-x-menu (stringp (car-safe elt)))
|
||||
elt (cons 'keymap elt)))))
|
||||
(unless (or (eq km 'ignore) (null str))
|
||||
(let ((binding (where-is-internal km nil t)))
|
||||
(when binding
|
||||
|
|
Loading…
Add table
Reference in a new issue