changeset 104920:566d2dc55a9d

* 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.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 10 Sep 2009 18:19:03 +0000
parents ad7987e70109
children 05feb973bfa0
files lisp/ChangeLog lisp/loadup.el lisp/startup.el lisp/subr.el src/ChangeLog src/keyboard.c
diffstat 6 files changed, 60 insertions(+), 144 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Sep 10 16:47:47 2009 +0000
+++ b/lisp/ChangeLog	Thu Sep 10 18:19:03 2009 +0000
@@ -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.
--- a/lisp/loadup.el	Thu Sep 10 16:47:47 2009 +0000
+++ b/lisp/loadup.el	Thu Sep 10 18:19:03 2009 +0000
@@ -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")
--- a/lisp/startup.el	Thu Sep 10 16:47:47 2009 +0000
+++ b/lisp/startup.el	Thu Sep 10 18:19:03 2009 +0000
@@ -501,8 +501,7 @@
 		     (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 @@
 	(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 @@
         (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")
--- a/lisp/subr.el	Thu Sep 10 16:47:47 2009 +0000
+++ b/lisp/subr.el	Thu Sep 10 18:19:03 2009 +0000
@@ -1076,6 +1076,7 @@
 
 ;;;; 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")
--- a/src/ChangeLog	Thu Sep 10 16:47:47 2009 +0000
+++ b/src/ChangeLog	Thu Sep 10 18:19:03 2009 +0000
@@ -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.
--- a/src/keyboard.c	Thu Sep 10 16:47:47 2009 +0000
+++ b/src/keyboard.c	Thu Sep 10 18:19:03 2009 +0000
@@ -495,11 +495,9 @@
 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 @@
      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 @@
 	  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 @@
 	  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 @@
 	      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 @@
     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))
-    {
-      int chkcache = 0;
-      Lisp_Object prefix;
-
-      if (!NILP (tem))
-	tem = Fkey_binding (tem, Qnil, Qnil, Qnil);
-
-      prefix = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
+  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
+    {
+      Lisp_Object prefix = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
+      Lisp_Object keys = Qnil;
+
       if (CONSP (prefix))
 	{
 	  def = XCAR (prefix);
@@ -8125,58 +8089,27 @@
       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)
-	{
-	  /* 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;
-	}
-
-      newcache = chkcache;
-      if (chkcache)
-	{
-	  tem = Fkey_description (tem, Qnil);
+      if (CONSP (keyhint) && !NILP (XCAR (keyhint)))
+	{
+	  keys = XCAR (keyhint);
+	  tem = Fkey_binding (keys, Qnil, Qnil, Qnil);
+
+	  /* 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 (keys, Qnil);
 	  if (CONSP (prefix))
 	    {
 	      if (STRINGP (XCAR (prefix)))
@@ -8184,17 +8117,11 @@
 	      if (STRINGP (XCDR (prefix)))
 		tem = concat2 (tem, XCDR (prefix));
 	    }
-	  XSETCDR (cachelist, tem);
-	}
-    }
-
-  tem = XCDR (cachelist);
-  if (newcache && !NILP (tem))
-    {
-      tem = concat2 (build_string ("  "), tem);
-      /* tem = concat3 (build_string ("  ("), tem, build_string (")")); */
-      XSETCDR (cachelist, tem);
-    }
+	  tem = concat2 (build_string ("  "), tem);
+	  /* tem = concat3 (build_string ("  ("), tem, build_string (")")); */
+	}
+    }
+  
 
   /* If we only want to precompute equivalent key bindings, stop here. */
   if (notreal)
@@ -11870,8 +11797,6 @@
 
   Qmenu_enable = intern ("menu-enable");
   staticpro (&Qmenu_enable);
-  Qmenu_alias = intern ("menu-alias");
-  staticpro (&Qmenu_alias);
   QCenable = intern (":enable");
   staticpro (&QCenable);
   QCvisible = intern (":visible");