emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/src/undo.c
Date: Tue, 08 Feb 2005 15:49:18 -0500

Index: emacs/src/undo.c
diff -c emacs/src/undo.c:1.69 emacs/src/undo.c:1.70
*** emacs/src/undo.c:1.69       Mon Feb  7 11:44:00 2005
--- emacs/src/undo.c    Tue Feb  8 20:49:16 2005
***************
*** 556,571 ****
                }
              else if (EQ (car, Qapply))
                {
!                 /* Element (apply FUNNAME . ARGS) means call FUNNAME to undo. 
 */
                  car = Fcar (cdr);
                  if (INTEGERP (car))
                    {
!                     /* Long format: (apply DELTA START END FUNNAME . ARGS).  
*/
!                     cdr = Fcdr (Fcdr (Fcdr (cdr)));
!                     car = Fcar (cdr);
                    }
!                 cdr = Fcdr (cdr);
!                 apply1 (car, cdr);
                  did_apply = 1;
                }
              else if (STRINGP (car) && INTEGERP (cdr))
--- 556,587 ----
                }
              else if (EQ (car, Qapply))
                {
!                 /* Element (apply FUN . ARGS) means call FUN to undo.  */
                  car = Fcar (cdr);
+                 cdr = Fcdr (cdr);
                  if (INTEGERP (car))
                    {
!                     /* Long format: (apply DELTA START END FUN . ARGS).  */
!                     Lisp_Object delta = car;
!                     Lisp_Object start = Fcar (cdr);
!                     Lisp_Object end   = Fcar (Fcdr (cdr));
!                     Lisp_Object start_mark = Fcopy_marker (start, Qnil);
!                     Lisp_Object end_mark   = Fcopy_marker (end, Qt);
! 
!                     cdr = Fcdr (Fcdr (cdr));
!                     apply1 (Fcar (cdr), Fcdr (cdr));
! 
!                     /* Check that the function did what the entry said it
!                        would do.  */
!                     if (!EQ (start, Fmarker_position (start_mark))
!                         || (XINT (delta) + XINT (end)
!                             != marker_position (end_mark)))
!                       error ("Changes to be undone by function different than 
announced");
!                     Fset_marker (start_mark, Qnil, Qnil);
!                     Fset_marker (end_mark, Qnil, Qnil);
                    }
!                 else
!                   apply1 (car, cdr);
                  did_apply = 1;
                }
              else if (STRINGP (car) && INTEGERP (cdr))




reply via email to

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