From: Kim F. Storm Date: Wed, 12 Feb 2003 11:08:36 +0000 (+0000) Subject: (Fstart_kbd_macro): If appending, and last keyboard X-Git-Tag: ttn-vms-21-2-B4~11226 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=295fff2c70e4b6dfef984ec01bc3ba05ff2ad5d2;p=emacs.git (Fstart_kbd_macro): If appending, and last keyboard macro is a string, convert meta modifiers in string when copying the string into a vector. --- diff --git a/src/ChangeLog b/src/ChangeLog index 04abcc37c58..32c72798647 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2003-02-12 Kim F. Storm + + * macros.c (Fstart_kbd_macro): If appending, and last keyboard + macro is a string, convert meta modifiers in string when copying + the string into a vector. + 2003-02-11 Kim F. Storm * keymap.c (Fremap_command): Return nil if arg is not a symbol. diff --git a/src/macros.c b/src/macros.c index 44d44d2c9c1..2b50a491ca4 100644 --- a/src/macros.c +++ b/src/macros.c @@ -93,6 +93,7 @@ macro before appending to it. */) else { int i, len; + int cvt; /* Check the type of last-kbd-macro in case Lisp code changed it. */ if (!STRINGP (current_kboard->Vlast_kbd_macro) @@ -111,9 +112,17 @@ macro before appending to it. */) = (Lisp_Object *)xrealloc (current_kboard->kbd_macro_buffer, (len + 30) * sizeof (Lisp_Object)); } + + /* Must convert meta modifier when copying string to vector. */ + cvt = STRINGP (current_kboard->Vlast_kbd_macro); for (i = 0; i < len; i++) - current_kboard->kbd_macro_buffer[i] - = Faref (current_kboard->Vlast_kbd_macro, make_number (i)); + { + Lisp_Object c; + c = Faref (current_kboard->Vlast_kbd_macro, make_number (i)); + if (cvt && INTEGERP (c) && (XINT (c) & 0x80)) + c = XSETFASTINT (c, CHAR_META | (XINT (c) & ~0x80)); + current_kboard->kbd_macro_buffer[i] = c; + } current_kboard->kbd_macro_ptr = current_kboard->kbd_macro_buffer + len; current_kboard->kbd_macro_end = current_kboard->kbd_macro_ptr;