diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2009-09-10 18:19:03 +0000 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2009-09-10 18:19:03 +0000 |
commit | 50d4ba399303b7365b03cdd3456a28eae3451fa0 (patch) | |
tree | c63ce12cfa63ee99c330b5ab7c3cd3d5f3b0f73d | |
parent | deeb21d4d76909c91f4f94f1fa1bbc782fb5f75a (diff) | |
download | emacs-50d4ba399303b7365b03cdd3456a28eae3451fa0.tar.gz |
* 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.
-rw-r--r-- | lisp/ChangeLog | 9 | ||||
-rw-r--r-- | lisp/loadup.el | 6 | ||||
-rw-r--r-- | lisp/startup.el | 22 | ||||
-rw-r--r-- | lisp/subr.el | 1 | ||||
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/keyboard.c | 145 |
6 files changed, 52 insertions, 136 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 93372a90e44..6487d3fcbef 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2009-09-10 Stefan Monnier <monnier@iro.umontreal.ca> + + * 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 <rgm@gnu.org> * pcvs.el (cvs-mode-find-file): Use forward-line rather than goto-line. diff --git a/lisp/loadup.el b/lisp/loadup.el index 8f1fe845e39..1fe7d459705 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 1d534d12e09..a260cd7c579 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 23bb63dc85d..ae19a644ee1 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 c530325ed69..f21e06a361b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2009-09-10 Stefan Monnier <monnier@iro.umontreal.ca> + * 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 04af3585897..35c338cc74c 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"); |