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
else if (strp[0] == '\\' && strp[1] == '[')
{
int start_idx;
+ int follow_remap = 1;
changed = 1;
strp += 2; /* skip \[ */
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;