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