Mercurial > emacs
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. */ |