changeset 5613:cad51b2de6cd

(Fkey_binding): Handle Voverriding_local_map. (describe_buffer_bindings): Likewise.
author Richard M. Stallman <rms@gnu.org>
date Sun, 16 Jan 1994 23:39:50 +0000
parents bf68550ececf
children 16074afb03df
files src/keymap.c
diffstat 1 files changed, 31 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/keymap.c	Sun Jan 16 21:25:09 1994 +0000
+++ b/src/keymap.c	Sun Jan 16 23:39:50 1994 +0000
@@ -80,6 +80,8 @@
    character.  */
 extern Lisp_Object meta_prefix_char;
 
+extern Lisp_Object Voverriding_local_map;
+
 void describe_map_tree ();
 static Lisp_Object define_as_prefix ();
 static Lisp_Object describe_buffer_bindings ();
@@ -819,21 +821,30 @@
   Lisp_Object *maps, value;
   int nmaps, i;
 
-  nmaps = current_minor_maps (0, &maps);
-  for (i = 0; i < nmaps; i++)
-    if (! NILP (maps[i]))
-      {
-	value = Flookup_key (maps[i], key, accept_default);
-	if (! NILP (value) && XTYPE (value) != Lisp_Int)
-	  return value;
-      }
-
-  if (! NILP (current_buffer->keymap))
+  if (!NILP (Voverriding_local_map))
     {
-      value = Flookup_key (current_buffer->keymap, key, accept_default);
+      value = Flookup_key (Voverriding_local_map, key, accept_default);
       if (! NILP (value) && XTYPE (value) != Lisp_Int)
 	return value;
     }
+  else
+    { 
+      nmaps = current_minor_maps (0, &maps);
+      for (i = 0; i < nmaps; i++)
+	if (! NILP (maps[i]))
+	  {
+	    value = Flookup_key (maps[i], key, accept_default);
+	    if (! NILP (value) && XTYPE (value) != Lisp_Int)
+	      return value;
+	  }
+
+      if (! NILP (current_buffer->keymap))
+	{
+	  value = Flookup_key (current_buffer->keymap, key, accept_default);
+	  if (! NILP (value) && XTYPE (value) != Lisp_Int)
+	    return value;
+	}
+    }
 
   value = Flookup_key (current_global_map, key, accept_default);
   if (! NILP (value) && XTYPE (value) != Lisp_Int)
@@ -1731,7 +1742,10 @@
     /* Temporarily switch to descbuf, so that we can get that buffer's
        minor modes correctly.  */
     Fset_buffer (descbuf);
-    nmaps = current_minor_maps (&modes, &maps);
+    if (!NILP (Voverriding_local_map))
+      nmaps = 0;
+    else
+      nmaps = current_minor_maps (&modes, &maps);
     Fset_buffer (Vstandard_output);
 
     /* Print the minor mode maps.  */
@@ -1767,7 +1781,11 @@
   }
 
   /* Print the (major mode) local map.  */
-  start1 = XBUFFER (descbuf)->keymap;
+  if (!NILP (Voverriding_local_map))
+    start1 = Voverriding_local_map;
+  else
+    start1 = XBUFFER (descbuf)->keymap;
+
   if (!NILP (start1))
     {
       describe_map_tree (start1, 0, shadow, prefix,