summaryrefslogtreecommitdiff
path: root/src/doc.c
diff options
context:
space:
mode:
authorKim F. Storm <storm@cua.dk>2005-09-09 11:55:09 +0000
committerKim F. Storm <storm@cua.dk>2005-09-09 11:55:09 +0000
commita1d3a18846b6e5f0bb4da5442075867027727afe (patch)
treed67a858179ae8fe3598dc9176cfd893a86dffd34 /src/doc.c
parent39cac6b3ea85c0553c95a8d24ed1f12099a71683 (diff)
downloademacs-a1d3a18846b6e5f0bb4da5442075867027727afe.tar.gz
emacs-a1d3a18846b6e5f0bb4da5442075867027727afe.tar.bz2
emacs-a1d3a18846b6e5f0bb4da5442075867027727afe.zip
(Fsubstitute_command_keys): Lookup key binding for
commands that are remapped from some other command.
Diffstat (limited to 'src/doc.c')
-rw-r--r--src/doc.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/doc.c b/src/doc.c
index 6d54aeceacd..a31c53d5b21 100644
--- 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;