]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fsubstitute_command_keys): Lookup key binding for
authorKim F. Storm <storm@cua.dk>
Fri, 9 Sep 2005 11:55:09 +0000 (11:55 +0000)
committerKim F. Storm <storm@cua.dk>
Fri, 9 Sep 2005 11:55:09 +0000 (11:55 +0000)
commands that are remapped from some other command.

src/doc.c

index 6d54aeceacde4cfb171330dc71e83e0a448c6fb0..a31c53d5b2134fde918ed411a2b048ace56bf270 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -57,6 +57,8 @@ static Lisp_Object Vbuild_files;
 
 extern Lisp_Object Voverriding_local_map;
 
+extern Lisp_Object Qremap;
+
 /* For VMS versions with limited file name syntax,
    convert the name to something VMS will allow.  */
 static void
@@ -812,6 +814,7 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
       else if (strp[0] == '\\' && strp[1] == '[')
        {
          int start_idx;
+         int follow_remap = 1;
 
          changed = 1;
          strp += 2;            /* skip \[ */
@@ -830,11 +833,21 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
          idx = strp - SDATA (string);
          name = Fintern (make_string (start, length_byte), Qnil);
 
+       do_remap:
          /* Ignore remappings unless there are no ordinary bindings. */
          tem = Fwhere_is_internal (name, keymap, Qt, Qnil, Qt);
          if (NILP (tem))
            tem = Fwhere_is_internal (name, keymap, Qt, Qnil, Qnil);
 
+         if (VECTORP (tem) && XVECTOR (tem)->size > 1
+             && EQ (AREF (tem, 0), Qremap) && SYMBOLP (AREF (tem, 1))
+             && follow_remap)
+           {
+             name = AREF (tem, 1);
+             follow_remap = 0;
+             goto do_remap;
+           }
+
          /* Note the Fwhere_is_internal can GC, so we have to take
             relocation of string contents into account.  */
          strp = SDATA (string) + idx;