diff src/keymap.c @ 1120:0a486e1a45bc

* keymap.c (describe_buffer_bindings): Adjust key_heading to match the format used by describe_map_tree. Also, don't reprint the "key binding" header above the global bindings if we've already printed it for the local bindings; it's clear enough that the columns mean the same thing as above. * keymap.c (describe_buffer_bindings): Declare buf and bufend... * keymap.c (describe_buffer_bindings): Set the current buffer to descbuf before calling current_minor_maps; that function's value depends on the values of buffer-local variables. Don't set the current buffer to Vstandard_output until afterwards. * keymap.c (describe_buffer_bindings): If Vkeyboard_translate_table is in effect, describe its effects.
author Jim Blandy <jimb@redhat.com>
date Sun, 13 Sep 1992 12:33:23 +0000
parents 6578f07e9eb8
children f7b55bfe1c05
line wrap: on
line diff
--- a/src/keymap.c	Sun Sep 13 12:31:15 1992 +0000
+++ b/src/keymap.c	Sun Sep 13 12:33:23 1992 +0000
@@ -1379,16 +1379,59 @@
 {
   register Lisp_Object start1, start2;
 
-  char *heading
-    = "key                     binding\n---                     -------\n";
+  char *key_heading
+    = "\
+key             binding\n\
+---             -------\n";
+  char *alternate_heading
+    = "\
+Alternate Characters (use anywhere the nominal character is listed):\n\
+nominal         alternate\n\
+-------         ---------\n";
 
   Fset_buffer (Vstandard_output);
 
+  /* Report on alternates for keys.  */
+  if (XTYPE (Vkeyboard_translate_table) == Lisp_String)
+    {
+      int c;
+      unsigned char *translate = XSTRING (Vkeyboard_translate_table)->data;
+      int translate_len = XSTRING (Vkeyboard_translate_table)->size;
+
+      for (c = 0; c < translate_len; c++)
+	if (translate[c] != c)
+	  {
+	    char buf[20];
+	    char *bufend;
+
+	    if (alternate_heading)
+	      {
+		insert_string (alternate_heading);
+		alternate_heading = 0;
+	      }
+
+	    bufend = push_key_description (translate[c], buf);
+	    insert (buf, bufend - buf);
+	    Findent_to (make_number (16), make_number (1));
+	    bufend = push_key_description (c, buf);
+	    insert (buf, bufend - buf);
+
+	    insert ("\n", 1);
+	  }
+
+      insert ("\n", 1);
+    }
+
   {
     int i, nmaps;
     Lisp_Object *modes, *maps;
 
+    /* Temporarily switch to descbuf, so that we can get that buffer's
+       minor modes correctly.  */
+    Fset_buffer (descbuf);
     nmaps = current_minor_maps (&modes, &maps);
+    Fset_buffer (Vstandard_output);
+
     for (i = 0; i < nmaps; i++)
       {
 	if (XTYPE (modes[i]) == Lisp_Symbol)
@@ -1400,7 +1443,7 @@
 	else
 	  insert_string ("Strangely Named");
 	insert_string (" Minor Mode Bindings:\n");
-	insert_string (heading);
+	insert_string (key_heading);
 	describe_map_tree (maps[i], 0, Qnil);
 	insert_char ('\n');
       }
@@ -1410,13 +1453,14 @@
   if (!NILP (start1))
     {
       insert_string ("Local Bindings:\n");
-      insert_string (heading);
+      insert_string (key_heading);
       describe_map_tree (start1, 0, Qnil);
       insert_string ("\n");
     }
 
   insert_string ("Global Bindings:\n");
-  insert_string (heading);
+  if (NILP (start1))
+    insert_string (key_heading);
 
   describe_map_tree (current_global_map, 0, XBUFFER (descbuf)->keymap);