From 50d4ba399303b7365b03cdd3456a28eae3451fa0 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 10 Sep 2009 18:19:03 +0000 Subject: [PATCH] * keyboard.c (Qmenu_alias, Vdefine_key_rebound_commands): Remove. (parse_menu_item): Streamline since bindings are recomputed all the time anyway. Don't bother checking Vdefine_key_rebound_commands any more and don't support lmenu's menu-alias any more either. * subr.el (define-key-rebound-commands): Mark obsolete. * startup.el (precompute-menubar-bindings): Remove. (normal-top-level): Remove obsolete code that tried to precompute menubar bindings. * loadup.el (define-key-rebound-commands): Don't bother fiddling with define-key-rebound-commands and precompute-menubar-bindings. --- lisp/ChangeLog | 9 +++ lisp/loadup.el | 6 -- lisp/startup.el | 22 +------- lisp/subr.el | 1 + src/ChangeLog | 5 ++ src/keyboard.c | 145 ++++++++++++------------------------------------ 6 files changed, 52 insertions(+), 136 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 93372a90e4..6487d3fcbe 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2009-09-10 Stefan Monnier + + * subr.el (define-key-rebound-commands): Mark obsolete. + * startup.el (precompute-menubar-bindings): Remove. + (normal-top-level): Remove obsolete code that tried to precompute + menubar bindings. + * loadup.el (define-key-rebound-commands): Don't bother fiddling with + define-key-rebound-commands and precompute-menubar-bindings. + 2009-09-10 Glenn Morris * pcvs.el (cvs-mode-find-file): Use forward-line rather than goto-line. diff --git a/lisp/loadup.el b/lisp/loadup.el index 8f1fe845e3..1fe7d45970 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -233,12 +233,6 @@ (if (load "site-load" t) (garbage-collect)) -(if (fboundp 'x-popup-menu) - (precompute-menubar-bindings)) -;; Turn on recording of which commands get rebound, -;; for the sake of the next call to precompute-menubar-bindings. -(setq define-key-rebound-commands nil) - ;; Determine which last version number to use ;; based on the executables that now exist. (if (and (or (equal (nth 3 command-line-args) "dump") diff --git a/lisp/startup.el b/lisp/startup.el index 1d534d12e0..a260cd7c57 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -501,8 +501,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'." (delete (concat "PWD=" pwd) process-environment))))) (setq default-directory (abbreviate-file-name default-directory)) - (let ((menubar-bindings-done nil) - (old-face-font-rescale-alist face-font-rescale-alist)) + (let ((old-face-font-rescale-alist face-font-rescale-alist)) (unwind-protect (command-line) ;; Do this again, in case .emacs defined more abbreviations. @@ -571,10 +570,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'." (if (fboundp 'font-menu-add-default) (font-menu-add-default)) (and window-setup-hook - (run-hooks 'window-setup-hook)) - (or menubar-bindings-done - (if (display-popup-menus-p) - (precompute-menubar-bindings))))) + (run-hooks 'window-setup-hook)))) ;; Subprocesses of Emacs do not have direct access to the terminal, so ;; unless told otherwise they should only assume a dumb terminal. ;; We are careful to do it late (after term-setup-hook), although the @@ -595,20 +591,6 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'." (delete display process-environment))))) ;; Precompute the keyboard equivalents in the menu bar items. -(defun precompute-menubar-bindings () - (let ((submap (lookup-key global-map [menu-bar]))) - (while submap - (and (consp (car submap)) - (symbolp (car (car submap))) - (stringp (car-safe (cdr (car submap)))) - (keymapp (cdr (cdr (car submap)))) - (progn - (x-popup-menu nil (cdr (cdr (car submap)))) - (if purify-flag - (garbage-collect)))) - (setq submap (cdr submap)))) - (setq define-key-rebound-commands t)) - ;; Command-line options supported by tty's: (defconst tty-long-option-alist '(("--name" . "-name") diff --git a/lisp/subr.el b/lisp/subr.el index 23bb63dc85..ae19a644ee 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1076,6 +1076,7 @@ is converted into a string by expressing it in decimal." ;;;; Obsolescence declarations for variables, and aliases. +(make-obsolete-variable 'define-key-rebound-commands nil "23.2") (make-obsolete-variable 'redisplay-end-trigger-functions 'jit-lock-register "23.1") (make-obsolete 'window-redisplay-end-trigger nil "23.1") (make-obsolete 'set-window-redisplay-end-trigger nil "23.1") diff --git a/src/ChangeLog b/src/ChangeLog index c530325ed6..f21e06a361 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2009-09-10 Stefan Monnier + * keyboard.c (Qmenu_alias, Vdefine_key_rebound_commands): Remove. + (parse_menu_item): Streamline since bindings are recomputed all the + time anyway. Don't bother checking Vdefine_key_rebound_commands any + more and don't support lmenu's menu-alias any more either. + * keymap.c (where_is_internal_data): Make noindirect a boolean. (where_is_internal): Strip it down to only traverse the keymaps. Move the cache handling from Fwhere_is_internal to here. diff --git a/src/keyboard.c b/src/keyboard.c index 04af358589..35c338cc74 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -495,11 +495,9 @@ Lisp_Object Qevent_kind; Lisp_Object Qevent_symbol_elements; /* menu item parts */ -Lisp_Object Qmenu_alias; Lisp_Object Qmenu_enable; Lisp_Object QCenable, QCvisible, QChelp, QCfilter, QCkeys, QCkey_sequence; Lisp_Object QCbutton, QCtoggle, QCradio; -extern Lisp_Object Vdefine_key_rebound_commands; extern Lisp_Object Qmenu_item; /* An event header symbol HEAD may have a property named @@ -7883,13 +7881,10 @@ parse_menu_item (item, notreal, inmenubar) int notreal, inmenubar; { Lisp_Object def, tem, item_string, start; - Lisp_Object cachelist; Lisp_Object filter; Lisp_Object keyhint; int i; - int newcache = 0; - cachelist = Qnil; filter = Qnil; keyhint = Qnil; @@ -7926,14 +7921,11 @@ parse_menu_item (item, notreal, inmenubar) item = XCDR (item); } - /* Maybe key binding cache. */ + /* Maybe an obsolete key binding cache. */ if (CONSP (item) && CONSP (XCAR (item)) && (NILP (XCAR (XCAR (item))) || VECTORP (XCAR (XCAR (item))))) - { - cachelist = XCAR (item); - item = XCDR (item); - } + item = XCDR (item); /* This is the real definition--the function to run. */ ASET (item_properties, ITEM_PROPERTY_DEF, item); @@ -7959,12 +7951,9 @@ parse_menu_item (item, notreal, inmenubar) ASET (item_properties, ITEM_PROPERTY_DEF, XCAR (start)); item = XCDR (start); - /* Is there a cache list with key equivalences. */ + /* Is there an obsolete cache list with key equivalences. */ if (CONSP (item) && CONSP (XCAR (item))) - { - cachelist = XCAR (item); - item = XCDR (item); - } + item = XCDR (item); /* Parse properties. */ while (CONSP (item) && CONSP (XCDR (item))) @@ -7994,15 +7983,14 @@ parse_menu_item (item, notreal, inmenubar) else if (EQ (tem, QCkey_sequence)) { tem = XCAR (item); - if (NILP (cachelist) - && (SYMBOLP (tem) || STRINGP (tem) || VECTORP (tem))) + if (SYMBOLP (tem) || STRINGP (tem) || VECTORP (tem)) /* Be GC protected. Set keyhint to item instead of tem. */ keyhint = item; } else if (EQ (tem, QCkeys)) { tem = XCAR (item); - if (CONSP (tem) || (STRINGP (tem) && NILP (cachelist))) + if (CONSP (tem) || STRINGP (tem)) ASET (item_properties, ITEM_PROPERTY_KEYEQ, tem); } else if (EQ (tem, QCbutton) && CONSP (XCAR (item))) @@ -8083,40 +8071,16 @@ parse_menu_item (item, notreal, inmenubar) return 1; /* This is a command. See if there is an equivalent key binding. */ - if (NILP (cachelist)) - { - /* We have to create a cachelist. */ - /* With the introduction of where_is_cache, the computation - of equivalent key bindings is sufficiently fast that we - do not need to cache it here any more. */ - /* CHECK_IMPURE (start); - XSETCDR (start, Fcons (Fcons (Qnil, Qnil), XCDR (start))); - cachelist = XCAR (XCDR (start)); */ - cachelist = Fcons (Qnil, Qnil); - newcache = 1; - tem = AREF (item_properties, ITEM_PROPERTY_KEYEQ); - if (!NILP (keyhint)) - { - XSETCAR (cachelist, XCAR (keyhint)); - newcache = 0; - } - else if (STRINGP (tem)) - { - XSETCDR (cachelist, Fsubstitute_command_keys (tem)); - XSETCAR (cachelist, Qt); - } - } - - tem = XCAR (cachelist); - if (!EQ (tem, Qt)) + tem = AREF (item_properties, ITEM_PROPERTY_KEYEQ); + /* The previous code preferred :key-sequence to :keys, so we + preserve this behavior. */ + if (STRINGP (tem) && !CONSP (keyhint)) + tem = Fsubstitute_command_keys (tem); + else { - int chkcache = 0; - Lisp_Object prefix; - - if (!NILP (tem)) - tem = Fkey_binding (tem, Qnil, Qnil, Qnil); + Lisp_Object prefix = AREF (item_properties, ITEM_PROPERTY_KEYEQ); + Lisp_Object keys = Qnil; - prefix = AREF (item_properties, ITEM_PROPERTY_KEYEQ); if (CONSP (prefix)) { def = XCAR (prefix); @@ -8125,58 +8089,27 @@ parse_menu_item (item, notreal, inmenubar) else def = AREF (item_properties, ITEM_PROPERTY_DEF); - if (NILP (XCAR (cachelist))) /* Have no saved key. */ - { - if (newcache /* Always check first time. */ - /* Should we check everything when precomputing key - bindings? */ - /* If something had no key binding before, don't recheck it - because that is too slow--except if we have a list of - rebound commands in Vdefine_key_rebound_commands, do - recheck any command that appears in that list. */ - || (CONSP (Vdefine_key_rebound_commands) - && !NILP (Fmemq (def, Vdefine_key_rebound_commands)))) - chkcache = 1; - } - /* We had a saved key. Is it still bound to the command? */ - else if (NILP (tem) - || (!EQ (tem, def) - /* If the command is an alias for another - (such as lmenu.el set it up), check if the - original command matches the cached command. */ - && !(SYMBOLP (def) && EQ (tem, XSYMBOL (def)->function)))) - chkcache = 1; /* Need to recompute key binding. */ - - if (chkcache) + if (CONSP (keyhint) && !NILP (XCAR (keyhint))) { - /* Recompute equivalent key binding. If the command is an alias - for another (such as lmenu.el set it up), see if the original - command name has equivalent keys. Otherwise look up the - specified command itself. We don't try both, because that - makes lmenu menus slow. */ - if (SYMBOLP (def) - && SYMBOLP (XSYMBOL (def)->function) - && ! NILP (Fget (def, Qmenu_alias))) - def = XSYMBOL (def)->function; - tem = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qnil); - - XSETCAR (cachelist, tem); - if (NILP (tem)) - { - XSETCDR (cachelist, Qnil); - chkcache = 0; - } - } - else if (!NILP (keyhint) && !NILP (XCAR (cachelist))) - { - tem = XCAR (cachelist); - chkcache = 1; - } + keys = XCAR (keyhint); + tem = Fkey_binding (keys, Qnil, Qnil, Qnil); - newcache = chkcache; - if (chkcache) + /* We have a suggested key. Is it bound to the command? */ + if (NILP (tem) + || (!EQ (tem, def) + /* If the command is an alias for another + (such as lmenu.el set it up), check if the + original command matches the cached command. */ + && !(SYMBOLP (def) && EQ (tem, XSYMBOL (def)->function)))) + keys = Qnil; + } + + if (NILP (keys)) + keys = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qnil); + + if (!NILP (keys)) { - tem = Fkey_description (tem, Qnil); + tem = Fkey_description (keys, Qnil); if (CONSP (prefix)) { if (STRINGP (XCAR (prefix))) @@ -8184,17 +8117,11 @@ parse_menu_item (item, notreal, inmenubar) if (STRINGP (XCDR (prefix))) tem = concat2 (tem, XCDR (prefix)); } - XSETCDR (cachelist, tem); + tem = concat2 (build_string (" "), tem); + /* tem = concat3 (build_string (" ("), tem, build_string (")")); */ } } - - tem = XCDR (cachelist); - if (newcache && !NILP (tem)) - { - tem = concat2 (build_string (" "), tem); - /* tem = concat3 (build_string (" ("), tem, build_string (")")); */ - XSETCDR (cachelist, tem); - } + /* If we only want to precompute equivalent key bindings, stop here. */ if (notreal) @@ -11870,8 +11797,6 @@ syms_of_keyboard () Qmenu_enable = intern ("menu-enable"); staticpro (&Qmenu_enable); - Qmenu_alias = intern ("menu-alias"); - staticpro (&Qmenu_alias); QCenable = intern (":enable"); staticpro (&QCenable); QCvisible = intern (":visible"); -- 2.20.1