# HG changeset patch # User Richard M. Stallman # Date 739908620 0 # Node ID aa9310f06c0f83393b9f2a73efc986df32817173 # Parent 674fb551b6938f4e23962e1b51ae5cb1b952ca42 (syms_of_undo): Set up Qinhibit_read_only. (Fprimitive_undo): Sometimes bind inhibit-read-only to t. diff -r 674fb551b693 -r aa9310f06c0f src/undo.c --- a/src/undo.c Sat Jun 12 17:46:44 1993 +0000 +++ b/src/undo.c Sat Jun 12 18:10:20 1993 +0000 @@ -26,6 +26,8 @@ /* Last buffer for which undo information was recorded. */ Lisp_Object last_undo_buffer; +Lisp_Object Qinhibit_read_only; + /* Record an insertion that just happened or is about to happen, for LENGTH characters at position BEG. (It is possible to record an insertion before or after the fact @@ -286,6 +288,7 @@ (count, list) Lisp_Object count, list; { + int count = specpdl_ptr - specpdl; register int arg = XINT (count); #if 0 /* This is a good feature, but would make undo-start unable to do what is expected. */ @@ -298,6 +301,10 @@ list = Fcdr (list); #endif + /* Don't let read-only properties interfere with undo. */ + if (NILP (current_buffer->read_only)) + specbind (Qinhibit_read_only, Qt); + while (arg > 0) { while (1) @@ -401,11 +408,14 @@ arg--; } - return list; + return unbind_to (count, list); } syms_of_undo () { + Qinhibit_read_only = intern ("inhibit-read-only"); + staticpro (&Qinhibit_read_only); + defsubr (&Sprimitive_undo); defsubr (&Sundo_boundary); }