GNU bug report logs -
#41002
Undo breaks inhibit-read-only text property
Previous Next
Full log
View this message in rfc822 format
On 09/05/2020 16:49 +0300, Eli Zaretskii wrote:
>> From: Filipp Gunbin <fgunbin <at> fastmail.fm>
>> Cc: egnartsms <at> gmail.com, 41002 <at> debbugs.gnu.org, larsi <at> gnus.org
>> Date: Sat, 09 May 2020 16:34:43 +0300
>>
>> > I think you are right: we need to augment this with something that
>> > pays attention to the inhibit-read-only property. Would you like to
>> > suggest a patch?
>>
>> That property is checked in INTERVAL_WRITABLE_P just above, it looks
>> fine.
>
> That tests if the interval is _not_ writable. But the problem is not
> triggered by the interval, it is triggered by characters after the
> interval, is it not?
The buffer is read-only, and all characters have inhibit-read-only
property set (it's in the recipe). Undo properly restores characters as
well as their properties. But now, after undo, we don't have one single
interval any more, we have 3 intervals instead: before killed region,
killed (and restored) region, and the rest. And this is where our
problematic (?) "if" triggers. So I wouldn't talk about characters
after the interval, no.
>> > Btw, how is this related to undo?
>>
>> Before undo, we seem to have one interval spanning all the text. After
>> undo, there appears a short interval on which "i->position + LENGTH (i)
>> < end" triggers.
>
> Right, thanks. So this situation could be recreated without any undo
> in the recipe, right?
Yes, just put-text-property on separate (and adjacent) intervals instead
of the full buffer at once, and try to kill a region which crosses
any interval boundary:
(with-temp-buffer
(insert "ab")
(put-text-property 1 2 'inhibit-read-only t)
(put-text-property 2 3 'inhibit-read-only t)
(setq buffer-read-only t)
(kill-region 1 3)) ;(kill-region 1 2) works
Thanks,
Filipp
This bug report was last modified 5 years and 33 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.