diff options
author | Richard M. Stallman <rms@gnu.org> | 1994-03-26 21:02:24 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1994-03-26 21:02:24 +0000 |
commit | df28eb7b38be1a96163b3849962c4a6343e6d2f2 (patch) | |
tree | 316ae2e6b718a3a4f3767ec1b60bf3acdc9430e0 /src/intervals.c | |
parent | 24cffc681071efcbfedc7297a036c9f69e5d8167 (diff) | |
download | emacs-df28eb7b38be1a96163b3849962c4a6343e6d2f2.tar.gz |
(verify_interval_modification): For insertion in
middle of an interval, use the same criterion as between intervals
for whether read-only forbids it.
Diffstat (limited to 'src/intervals.c')
-rw-r--r-- | src/intervals.c | 33 |
1 files changed, 22 insertions, 11 deletions
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"); + } } } |