emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/macros.c


From: Kim F. Storm
Subject: [Emacs-diffs] Changes to emacs/src/macros.c
Date: Wed, 14 Aug 2002 06:35:31 -0400

Index: emacs/src/macros.c
diff -c emacs/src/macros.c:1.47 emacs/src/macros.c:1.48
*** emacs/src/macros.c:1.47     Thu Jul 11 11:24:13 2002
--- emacs/src/macros.c  Wed Aug 14 06:35:31 2002
***************
*** 55,69 ****
  
  Lisp_Object Fexecute_kbd_macro ();
  
! DEFUN ("start-kbd-macro", Fstart_kbd_macro, Sstart_kbd_macro, 1, 1, "P",
         doc: /* Record subsequent keyboard input, defining a keyboard macro.
  The commands are recorded even as they are executed.
  Use \\[end-kbd-macro] to finish recording and make the macro available.
  Use \\[name-last-kbd-macro] to give it a permanent name.
  Non-nil arg (prefix arg) means append to last macro defined;
! this begins by re-executing that macro as if you typed it again.  */)
!      (append)
!      Lisp_Object append;
  {
    if (!NILP (current_kboard->defining_kbd_macro))
      error ("Already defining kbd macro");
--- 55,71 ----
  
  Lisp_Object Fexecute_kbd_macro ();
  
! DEFUN ("start-kbd-macro", Fstart_kbd_macro, Sstart_kbd_macro, 1, 2, "P",
         doc: /* Record subsequent keyboard input, defining a keyboard macro.
  The commands are recorded even as they are executed.
  Use \\[end-kbd-macro] to finish recording and make the macro available.
  Use \\[name-last-kbd-macro] to give it a permanent name.
  Non-nil arg (prefix arg) means append to last macro defined;
! this begins by re-executing that macro as if you typed it again.
! If optional second arg, NO-EXEC, is non-nil, do not re-execute last 
! macro before appending to it. */)
!      (append, no_exec)
!      Lisp_Object append, no_exec;
  {
    if (!NILP (current_kboard->defining_kbd_macro))
      error ("Already defining kbd macro");
***************
*** 118,125 ****
  
        /* Re-execute the macro we are appending to,
         for consistency of behavior.  */
!       Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro,
!                         make_number (1));
  
        message ("Appending to kbd macro...");
      }
--- 120,128 ----
  
        /* Re-execute the macro we are appending to,
         for consistency of behavior.  */
!       if (NILP (no_exec))
!       Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro,
!                           make_number (1), Qnil);
  
        message ("Appending to kbd macro...");
      }
***************
*** 128,134 ****
    return Qnil;
  }
  
! DEFUN ("end-kbd-macro", Fend_kbd_macro, Send_kbd_macro, 0, 1, "p",
         doc: /* Finish defining a keyboard macro.
  The definition was started by \\[start-kbd-macro].
  The macro is now available for use via \\[call-last-kbd-macro],
--- 131,137 ----
    return Qnil;
  }
  
! DEFUN ("end-kbd-macro", Fend_kbd_macro, Send_kbd_macro, 0, 2, "p",
         doc: /* Finish defining a keyboard macro.
  The definition was started by \\[start-kbd-macro].
  The macro is now available for use via \\[call-last-kbd-macro],
***************
*** 137,145 ****
  
  With numeric arg, repeat macro now that many times,
  counting the definition just completed as the first repetition.
! An argument of zero means repeat until error.  */)
!      (repeat)
!      Lisp_Object repeat;
  {
    if (NILP (current_kboard->defining_kbd_macro))
      error ("Not defining kbd macro");
--- 140,151 ----
  
  With numeric arg, repeat macro now that many times,
  counting the definition just completed as the first repetition.
! An argument of zero means repeat until error.
! 
! In Lisp, optional second arg LOOPFUNC may be a function that is called prior 
to 
! each iteration of the macro.  Iteration stops if LOOPFUNC returns nil.  */)
!      (repeat, loopfunc)
!      Lisp_Object repeat, loopfunc;
  {
    if (NILP (current_kboard->defining_kbd_macro))
      error ("Not defining kbd macro");
***************
*** 161,172 ****
      }
  
    if (XFASTINT (repeat) == 0)
!     Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, repeat);
    else
      {
        XSETINT (repeat, XINT (repeat)-1);
        if (XINT (repeat) > 0)
!       Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, repeat);
      }
    return Qnil;
  }
--- 167,178 ----
      }
  
    if (XFASTINT (repeat) == 0)
!     Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, repeat, loopfunc);
    else
      {
        XSETINT (repeat, XINT (repeat)-1);
        if (XINT (repeat) > 0)
!       Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, repeat, loopfunc);
      }
    return Qnil;
  }
***************
*** 228,242 ****
  }
  
  DEFUN ("call-last-kbd-macro", Fcall_last_kbd_macro, Scall_last_kbd_macro,
!        0, 1, "p",
         doc: /* Call the last keyboard macro that you defined with 
\\[start-kbd-macro].
  
  A prefix argument serves as a repeat count.  Zero means repeat until error.
  
  To make a macro permanent so you can call it even after
! defining others, use \\[name-last-kbd-macro].  */)
!      (prefix)
!      Lisp_Object prefix;
  {
    /* Don't interfere with recognition of the previous command
       from before this macro started.  */
--- 234,251 ----
  }
  
  DEFUN ("call-last-kbd-macro", Fcall_last_kbd_macro, Scall_last_kbd_macro,
!        0, 2, "p",
         doc: /* Call the last keyboard macro that you defined with 
\\[start-kbd-macro].
  
  A prefix argument serves as a repeat count.  Zero means repeat until error.
  
  To make a macro permanent so you can call it even after
! defining others, use \\[name-last-kbd-macro].  
! 
! In Lisp, optional second arg LOOPFUNC may be a function that is called prior 
to 
! each iteration of the macro.  Iteration stops if LOOPFUNC returns nil.  */)
!      (prefix, loopfunc)
!      Lisp_Object prefix, loopfunc;
  {
    /* Don't interfere with recognition of the previous command
       from before this macro started.  */
***************
*** 249,255 ****
    else if (NILP (current_kboard->Vlast_kbd_macro))
      error ("No kbd macro has been defined");
    else
!     Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, prefix);
  
    /* command_loop_1 sets this to nil before it returns;
       get back the last command within the macro
--- 258,264 ----
    else if (NILP (current_kboard->Vlast_kbd_macro))
      error ("No kbd macro has been defined");
    else
!     Fexecute_kbd_macro (current_kboard->Vlast_kbd_macro, prefix, loopfunc);
  
    /* command_loop_1 sets this to nil before it returns;
       get back the last command within the macro
***************
*** 275,292 ****
    return Qnil;
  }
  
! DEFUN ("execute-kbd-macro", Fexecute_kbd_macro, Sexecute_kbd_macro, 1, 2, 0,
         doc: /* Execute MACRO as string of editor command characters.
  If MACRO is a symbol, its function definition is used.
! COUNT is a repeat count, or nil for once, or 0 for infinite loop.  */)
!      (macro, count)
!      Lisp_Object macro, count;
  {
    Lisp_Object final;
    Lisp_Object tem;
    int pdlcount = SPECPDL_INDEX ();
    int repeat = 1;
!   struct gcpro gcpro1;
    int success_count = 0;
  
    executing_macro_iterations = 0;
--- 284,304 ----
    return Qnil;
  }
  
! DEFUN ("execute-kbd-macro", Fexecute_kbd_macro, Sexecute_kbd_macro, 1, 3, 0,
         doc: /* Execute MACRO as string of editor command characters.
  If MACRO is a symbol, its function definition is used.
! COUNT is a repeat count, or nil for once, or 0 for infinite loop. 
! 
! Optional third arg LOOPFUNC may be a function that is called prior to 
! each iteration of the macro.  Iteration stops if LOOPFUNC returns nil.  */)
!      (macro, count, loopfunc)
!      Lisp_Object macro, count, loopfunc;
  {
    Lisp_Object final;
    Lisp_Object tem;
    int pdlcount = SPECPDL_INDEX ();
    int repeat = 1;
!   struct gcpro gcpro1, gcpro2;
    int success_count = 0;
  
    executing_macro_iterations = 0;
***************
*** 306,312 ****
                      real_this_command));
    record_unwind_protect (pop_kbd_macro, tem);
  
!   GCPRO1 (final);
    do
      {
        Vexecuting_macro = final;
--- 318,324 ----
                      real_this_command));
    record_unwind_protect (pop_kbd_macro, tem);
  
!   GCPRO2 (final, loopfunc);
    do
      {
        Vexecuting_macro = final;
***************
*** 314,319 ****
--- 326,340 ----
        executing_macro_index = 0;
  
        current_kboard->Vprefix_arg = Qnil;
+ 
+       if (!NILP (loopfunc))
+       {
+         Lisp_Object cont;
+         cont = call0 (loopfunc);
+         if (NILP (cont))
+           break;
+       }
+ 
        command_loop_1 ();
  
        executing_macro_iterations = ++success_count;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]