]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fstart_kbd_macro): If appending, and last keyboard
authorKim F. Storm <storm@cua.dk>
Wed, 12 Feb 2003 11:08:36 +0000 (11:08 +0000)
committerKim F. Storm <storm@cua.dk>
Wed, 12 Feb 2003 11:08:36 +0000 (11:08 +0000)
macro is a string, convert meta modifiers in string when copying
the string into a vector.

src/ChangeLog
src/macros.c

index 04abcc37c58003bb25fdc0dedd9da93084d51618..32c727986471393d8c359bdd6beefa85d6c0cc0c 100644 (file)
@@ -1,3 +1,9 @@
+2003-02-12  Kim F. Storm  <storm@cua.dk>
+
+       * 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  <storm@cua.dk>
 
        * keymap.c (Fremap_command): Return nil if arg is not a symbol.
index 44d44d2c9c1f2bc89618b8058945c8c08d309045..2b50a491ca47e366603d299dab3792b046732287 100644 (file)
@@ -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;