changeset 49745:282c490f6cd4

(Fstart_kbd_macro): If appending, and last keyboard macro is a string, convert meta modifiers in string when copying the string into a vector.
author Kim F. Storm <storm@cua.dk>
date Wed, 12 Feb 2003 11:08:24 +0000
parents d15ccf22e8e8
children 0bbee9974a9a
files src/macros.c
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/macros.c	Wed Feb 12 10:21:27 2003 +0000
+++ b/src/macros.c	Wed Feb 12 11:08:24 2003 +0000
@@ -93,6 +93,7 @@
   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 @@
 	    = (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;