comparison src/undo.c @ 60000:bbd61dfcbd2c

(Fprimitive_undo): Check that undo function does not switch buffer.
author Kim F. Storm <storm@cua.dk>
date Wed, 09 Feb 2005 21:49:12 +0000
parents 6e49a3404a8e
children a8fa7c632ee4 3ebd9bdb4fe5
comparison
equal deleted inserted replaced
59999:fc21b849d45c 60000:bbd61dfcbd2c
555 Fdelete_region (car, cdr); 555 Fdelete_region (car, cdr);
556 } 556 }
557 else if (EQ (car, Qapply)) 557 else if (EQ (car, Qapply))
558 { 558 {
559 /* Element (apply FUN . ARGS) means call FUN to undo. */ 559 /* Element (apply FUN . ARGS) means call FUN to undo. */
560 struct buffer *save_buffer = current_buffer;
561
560 car = Fcar (cdr); 562 car = Fcar (cdr);
561 cdr = Fcdr (cdr); 563 cdr = Fcdr (cdr);
562 if (INTEGERP (car)) 564 if (INTEGERP (car))
563 { 565 {
564 /* Long format: (apply DELTA START END FUN . ARGS). */ 566 /* Long format: (apply DELTA START END FUN . ARGS). */
580 Fset_marker (start_mark, Qnil, Qnil); 582 Fset_marker (start_mark, Qnil, Qnil);
581 Fset_marker (end_mark, Qnil, Qnil); 583 Fset_marker (end_mark, Qnil, Qnil);
582 } 584 }
583 else 585 else
584 apply1 (car, cdr); 586 apply1 (car, cdr);
587
588 if (save_buffer != current_buffer)
589 error ("Undo function switched buffer");
585 did_apply = 1; 590 did_apply = 1;
586 } 591 }
587 else if (STRINGP (car) && INTEGERP (cdr)) 592 else if (STRINGP (car) && INTEGERP (cdr))
588 { 593 {
589 /* Element (STRING . POS) means STRING was deleted. */ 594 /* Element (STRING . POS) means STRING was deleted. */