* bug#41002: Undo breaks inhibit-read-only text property @ 2020-05-01 10:38 Serhii Mozghovyi 2020-05-02 17:33 ` Filipp Gunbin 0 siblings, 1 reply; 9+ messages in thread From: Serhii Mozghovyi @ 2020-05-01 10:38 UTC (permalink / raw) To: 41002 The inhibit-read-only text property in a read-only buffer does not work with Undo: C-x b <unique buffer name>, then insert some text, such as: --- First paragraph. Second paragraph. --- Then M-: (put-text-property (point-min) (point-max) 'inhibit-read-only t), and C-x C-q to make the buffer read-only. Now select the "Se" and kill it with C-w: it succeeds. Then hit C-/ to undo, select "Sec" and try to kill again. Now it fails. For any other region that does not intersect with "Se", killing works. ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-01 10:38 bug#41002: Undo breaks inhibit-read-only text property Serhii Mozghovyi @ 2020-05-02 17:33 ` Filipp Gunbin 2020-05-02 19:09 ` Serhii Mozghovyi 0 siblings, 1 reply; 9+ messages in thread From: Filipp Gunbin @ 2020-05-02 17:33 UTC (permalink / raw) To: Serhii Mozghovyi; +Cc: 41002 On 01/05/2020 13:38 +0300, Serhii Mozghovyi wrote: > The inhibit-read-only text property in a read-only buffer does not work > with Undo: > [...] Cannot reproduce on current master. Can you reproduce it with emacs -Q? Do you have any custom undo functionality? (like a package) You should file a proper bug report with M-x report-emacs-bug, it will automatically include your Emacs version. Filipp ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-02 17:33 ` Filipp Gunbin @ 2020-05-02 19:09 ` Serhii Mozghovyi 2020-05-03 3:22 ` Filipp Gunbin 0 siblings, 1 reply; 9+ messages in thread From: Serhii Mozghovyi @ 2020-05-02 19:09 UTC (permalink / raw) To: Filipp Gunbin; +Cc: 41002 Yes, I can reproduce with emacs -Q. My Emacs version is 26.3. Here are the details: In GNU Emacs 26.3 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30) of 2020-05-01 built on serhii-dell Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: CentOS Linux release 7.7.1908 (Core) Recent messages: Quit nil Read-Only mode enabled in current buffer Mark set 19 (#o23, #x13, ?\C-s) 20 (#o24, #x14, ?\C-t) Undo! Mark activated kill-region: Text is read-only: #<buffer new> Making completion list... Configured using: 'configure --prefix=/home/serhii/local' Configured features: XPM JPEG TIFF GIF PNG RSVG SOUND DBUS GSETTINGS GLIB NOTIFY LIBSELINUX GNUTLS LIBXML2 FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM THREADS Important settings: value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Fundamental Minor modes in effect: tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils elec-pair time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads dbusbind inotify dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 95086 6451) (symbols 48 20250 1) (miscs 40 47 168) (strings 32 28285 1382) (string-bytes 1 745581) (vectors 16 13895) (vector-slots 8 500670 14660) (floats 8 50 198) (intervals 56 235 9) (buffers 992 13) (heap 1024 24712 1221)) On 5/2/20 8:33 PM, Filipp Gunbin wrote: > On 01/05/2020 13:38 +0300, Serhii Mozghovyi wrote: > >> The inhibit-read-only text property in a read-only buffer does not work >> with Undo: >> > [...] > > Cannot reproduce on current master. Can you reproduce it with emacs -Q? > Do you have any custom undo functionality? (like a package) > > You should file a proper bug report with M-x report-emacs-bug, it will > automatically include your Emacs version. > > Filipp ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-02 19:09 ` Serhii Mozghovyi @ 2020-05-03 3:22 ` Filipp Gunbin 2020-05-09 7:37 ` Eli Zaretskii 2020-05-19 12:12 ` Lars Ingebrigtsen 0 siblings, 2 replies; 9+ messages in thread From: Filipp Gunbin @ 2020-05-03 3:22 UTC (permalink / raw) To: Serhii Mozghovyi; +Cc: 41002, larsi > On 5/2/20 8:33 PM, Filipp Gunbin wrote: [...] >> Cannot reproduce on current master. Can you reproduce it with emacs -Q? >> Do you have any custom undo functionality? (like a package) I see I wasn't trying right, it's actually reproducible on master too. I think this comes from verify_interval_modification (textprop.c). For each interval, we check INTERVAL_WRITABLE_P, and then: commit d1b04a9e7ada7070dbd84bb450411c1f169b3739 Author: Lars Magne Ingebrigtsen <larsi@gnus.org> Date: Sun Nov 16 23:36:58 2014 +0100 [...] diff --git a/src/textprop.c b/src/textprop.c --- a/src/textprop.c +++ b/src/textprop.c @@ -2301,0 +2301,4 @@ + if (i->position + LENGTH (i) < end + && (!NILP (BVAR (current_buffer, read_only)) + && NILP (Vinhibit_read_only))) + xsignal1 (Qbuffer_read_only, Fcurrent_buffer ()); So if there happens to be an (writeable) interval ending before "end" (the end of the region we're killing with C-w), we will signal that the buffer is read-only. This may be read as "if we're going over the boundary of an interval, then check the _buffer_ read-onliness". Maybe Lars, as the author of this code, could comment on this. Filipp ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-03 3:22 ` Filipp Gunbin @ 2020-05-09 7:37 ` Eli Zaretskii 2020-05-09 13:34 ` Filipp Gunbin 2020-05-19 12:12 ` Lars Ingebrigtsen 1 sibling, 1 reply; 9+ messages in thread From: Eli Zaretskii @ 2020-05-09 7:37 UTC (permalink / raw) To: Filipp Gunbin; +Cc: 41002, egnartsms, larsi > From: Filipp Gunbin <fgunbin@fastmail.fm> > Date: Sun, 03 May 2020 06:22:20 +0300 > Cc: 41002@debbugs.gnu.org, larsi@gnus.org > > --- a/src/textprop.c > +++ b/src/textprop.c > @@ -2301,0 +2301,4 @@ > + if (i->position + LENGTH (i) < end > + && (!NILP (BVAR (current_buffer, read_only)) > + && NILP (Vinhibit_read_only))) > + xsignal1 (Qbuffer_read_only, Fcurrent_buffer ()); > > So if there happens to be an (writeable) interval ending before "end" > (the end of the region we're killing with C-w), we will signal that the > buffer is read-only. This may be read as "if we're going over the > boundary of an interval, then check the _buffer_ read-onliness". Maybe > Lars, as the author of this code, could comment on this. 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? Btw, how is this related to undo? Thanks. ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-09 7:37 ` Eli Zaretskii @ 2020-05-09 13:34 ` Filipp Gunbin 2020-05-09 13:49 ` Eli Zaretskii 0 siblings, 1 reply; 9+ messages in thread From: Filipp Gunbin @ 2020-05-09 13:34 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 41002, egnartsms, larsi On 09/05/2020 10:37 +0300, Eli Zaretskii wrote: >> From: Filipp Gunbin <fgunbin@fastmail.fm> >> Date: Sun, 03 May 2020 06:22:20 +0300 >> Cc: 41002@debbugs.gnu.org, larsi@gnus.org >> >> --- a/src/textprop.c >> +++ b/src/textprop.c >> @@ -2301,0 +2301,4 @@ >> + if (i->position + LENGTH (i) < end >> + && (!NILP (BVAR (current_buffer, read_only)) >> + && NILP (Vinhibit_read_only))) >> + xsignal1 (Qbuffer_read_only, Fcurrent_buffer ()); >> >> So if there happens to be an (writeable) interval ending before "end" >> (the end of the region we're killing with C-w), we will signal that the >> buffer is read-only. This may be read as "if we're going over the >> boundary of an interval, then check the _buffer_ read-onliness". Maybe >> Lars, as the author of this code, could comment on this. > > 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.. The problem is I don't know what the "if" I cited is for. > 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. Filipp ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-09 13:34 ` Filipp Gunbin @ 2020-05-09 13:49 ` Eli Zaretskii 2020-05-09 16:55 ` Filipp Gunbin 0 siblings, 1 reply; 9+ messages in thread From: Eli Zaretskii @ 2020-05-09 13:49 UTC (permalink / raw) To: Filipp Gunbin; +Cc: 41002, egnartsms, larsi > From: Filipp Gunbin <fgunbin@fastmail.fm> > Cc: egnartsms@gmail.com, 41002@debbugs.gnu.org, larsi@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 problem is I don't know what the "if" I cited is for. Hopefully, Lars will answer that. > > 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? ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-09 13:49 ` Eli Zaretskii @ 2020-05-09 16:55 ` Filipp Gunbin 0 siblings, 0 replies; 9+ messages in thread From: Filipp Gunbin @ 2020-05-09 16:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 41002, egnartsms, larsi On 09/05/2020 16:49 +0300, Eli Zaretskii wrote: >> From: Filipp Gunbin <fgunbin@fastmail.fm> >> Cc: egnartsms@gmail.com, 41002@debbugs.gnu.org, larsi@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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41002: Undo breaks inhibit-read-only text property 2020-05-03 3:22 ` Filipp Gunbin 2020-05-09 7:37 ` Eli Zaretskii @ 2020-05-19 12:12 ` Lars Ingebrigtsen 1 sibling, 0 replies; 9+ messages in thread From: Lars Ingebrigtsen @ 2020-05-19 12:12 UTC (permalink / raw) To: Filipp Gunbin; +Cc: 41002, Serhii Mozghovyi Filipp Gunbin <fgunbin@fastmail.fm> writes: > @@ -2301,0 +2301,4 @@ > + if (i->position + LENGTH (i) < end > + && (!NILP (BVAR (current_buffer, read_only)) > + && NILP (Vinhibit_read_only))) > + xsignal1 (Qbuffer_read_only, Fcurrent_buffer ()); > > So if there happens to be an (writeable) interval ending before "end" > (the end of the region we're killing with C-w), we will signal that the > buffer is read-only. This may be read as "if we're going over the > boundary of an interval, then check the _buffer_ read-onliness". Maybe > Lars, as the author of this code, could comment on this. Hm... I've re-read the original patch, and I don't really have any recollection of what my original thought here was, I'm afraid. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-05-19 12:12 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-05-01 10:38 bug#41002: Undo breaks inhibit-read-only text property Serhii Mozghovyi 2020-05-02 17:33 ` Filipp Gunbin 2020-05-02 19:09 ` Serhii Mozghovyi 2020-05-03 3:22 ` Filipp Gunbin 2020-05-09 7:37 ` Eli Zaretskii 2020-05-09 13:34 ` Filipp Gunbin 2020-05-09 13:49 ` Eli Zaretskii 2020-05-09 16:55 ` Filipp Gunbin 2020-05-19 12:12 ` Lars Ingebrigtsen
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).