From df28eb7b38be1a96163b3849962c4a6343e6d2f2 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 26 Mar 1994 21:02:24 +0000 Subject: (verify_interval_modification): For insertion in middle of an interval, use the same criterion as between intervals for whether read-only forbids it. --- src/intervals.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'src/intervals.c') diff --git a/src/intervals.c b/src/intervals.c index 6c7ce7ee898..597fcf07b30 100644 --- a/src/intervals.c +++ b/src/intervals.c @@ -1847,8 +1847,7 @@ verify_interval_modification (buf, start, end) error ("Attempt to insert within read-only text"); } } - else - after = Qnil; + if (! NULL_INTERVAL_P (prev)) { before = textget (prev->plist, Qread_only); @@ -1868,18 +1867,30 @@ verify_interval_modification (buf, start, end) error ("Attempt to insert within read-only text"); } } - else - before = Qnil; } else if (! NULL_INTERVAL_P (i)) - before = after = textget (i->plist, Qread_only); - if (! NULL_INTERVAL_P (i) && ! NULL_INTERVAL_P (prev)) { - /* If I and PREV differ, neither of them has a sticky - read-only property. It only remains to check, whether - they have a common read-only property. */ - if (! NILP (before) && EQ (before, after)) - error ("Attempt to insert within read-only text"); + after = textget (i->plist, Qread_only); + + /* If interval I is read-only and read-only is + front-sticky, inhibit insertion. + Check for read-only as well as category. */ + if (! NILP (after) && NILP (Fmemq (after, Vinhibit_read_only))) + { + Lisp_Object tem; + + tem = textget (i->plist, Qfront_sticky); + if (TMEM (Qread_only, tem) + || (NILP (textget_direct (i->plist, Qread_only)) + && TMEM (Qcategory, tem))) + error ("Attempt to insert within read-only text"); + + tem = textget (prev->plist, Qrear_nonsticky); + if (! TMEM (Qread_only, tem) + && (! NILP (textget_direct (prev->plist, Qread_only)) + || ! TMEM (Qcategory, tem))) + error ("Attempt to insert within read-only text"); + } } } -- cgit v1.2.1