unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
@ 2022-11-26 14:42 Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-11-26 19:58 ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-11-26 14:42 UTC (permalink / raw)
  To: 59618

Afternoon,

If attempting to capture something while global-whitespace-mode is on,
a second capture will fail with "Marker does not point anywhere".  The
first capture attempt presumably succeeds since whitespace-mode didn't
touch the buffer yet at time of searching.  Reproduction steps:

1. emacs -Q --execute '(global-whitespace-mode)'
2. M-x org-capture RET t C-c C-c
2. M-x org-capture RET t

Note that while I'm reporting this from the mu4e-headers mode, I
reproduced it in other modes before.

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.34, cairo version 1.17.6) of 2022-11-22 built on localhost
Repository revision: 368d2531bec84c2e75b2fd2f32bb59fc2e7ee520
Repository branch: master
System Description: Gentoo Linux

Configured using:
 'configure --prefix=/usr --build=x86_64-pc-linux-gnu
 --host=x86_64-pc-linux-gnu --mandir=/usr/share/man
 --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
 --localstatedir=/var/lib --datarootdir=/usr/share
 --disable-silent-rules --docdir=/usr/share/doc/emacs-29.0.9999
 --htmldir=/usr/share/doc/emacs-29.0.9999/html --libdir=/usr/lib64
 --program-suffix=-emacs-29-vcs --includedir=/usr/include/emacs-29-vcs
 --infodir=/usr/share/info/emacs-29-vcs --localstatedir=/var
 --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp
 --without-compress-install --without-hesiod --without-pop
 --with-file-notification=inotify --with-pdumper --enable-acl
 --with-dbus --with-modules --with-gameuser=:gamestat --with-libgmp
 --with-gpm --with-native-compilation=aot --with-json --without-kerberos
 --without-kerberos5 --with-lcms2 --with-xml2 --without-mailutils
 --without-selinux --with-sqlite3 --with-gnutls --with-libsystemd
 --with-threads --without-wide-int --with-sound=alsa --with-zlib
 --with-pgtk --without-x --without-ns --with-toolkit-scroll-bars
 --without-gconf --without-gsettings --with-harfbuzz --with-libotf
 --with-m17n-flt --with-xwidgets --with-gif --with-jpeg --with-png
 --with-rsvg --with-tiff --without-webp --with-imagemagick
 --with-dumping=pdumper 'CFLAGS=-O2 -pipe
 -Werror=implicit-function-declaration -Werror=implicit-int'
 'LDFLAGS=-Wl,-O1 -Wl,--as-needed''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM HARFBUZZ IMAGEMAGICK
JPEG JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER XIM XWIDGETS GTK3 ZLIB

Important settings:
  value of $LC_TIME: en_GB.UTF-8
  value of $LANG: en_US.utf8
  locale-coding-system: utf-8-unix

Major mode: mu4e-headers

Minor modes in effect:
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  shell-dirtrack-mode: t
  server-mode: t
  mu4e-search-minor-mode: t
  hl-line-mode: t
  mu4e-update-minor-mode: t
  mu4e-context-minor-mode: t
  override-global-mode: t
  global-display-fill-column-indicator-mode: t
  global-display-line-numbers-mode: t
  display-line-numbers-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-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
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
~/.config/emacs/lp/poke-mode hides /usr/share/emacs/site-lisp/poke-mode
/usr/share/emacs/site-lisp/cmake-mode hides /usr/share/emacs/site-lisp/cmake/cmake-mode
/home/arsen/.config/emacs/elpa/dash-2.19.1/dash-functional hides /usr/share/emacs/site-lisp/dash/dash-functional
/home/arsen/.config/emacs/elpa/dash-2.19.1/dash hides /usr/share/emacs/site-lisp/dash/dash
/usr/share/emacs/site-lisp/desktop-entry-mode hides /usr/share/emacs/site-lisp/desktop-file-utils/desktop-entry-mode
/home/arsen/.config/emacs/elpa/with-editor-3.2.0/with-editor hides /usr/share/emacs/site-lisp/with-editor/with-editor
/home/arsen/.config/emacs/elpa/transient-0.3.7/transient hides /usr/share/emacs/29.0.50/lisp/transient

Features:
(shadow emacsbug term/tmux term/xterm xterm cl-print doctor cal-move
vc-dir magit-patch magit-subtree magit-gitignore magit-ediff ediff
ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init
ediff-util gnus-msg autoconf-mode dired-aux po-mode calc-undo calccomp
calc-incom calc-misc bug-reference magit-extras magit-bookmark
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit magit-repos magit-apply magit-wip magit-log which-func edebug
magit-diff git-commit log-edit magit-core magit-autorevert autorevert
magit-margin magit-transient magit-process with-editor magit-mode
transient magit-git magit-section magit-utils crm c-ts-mode term ehelp
cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
cc-vars cc-defs tramp-cmds tramp-cache time-stamp tramp-sh tramp
tramp-loaddefs trampver tramp-integration files-x tramp-compat shell
ls-lisp shortdoc tabify org-capture org-refile calc-alg calc-ext
calc-menu calc calc-loaddefs calc-macs novice url-http url-auth url-gw
eudc-capf eudc cus-edit cus-start cus-load eudc-vars smerge-mode diff
shr-color org-element avl-tree generator ol-eww eww xdg url-queue mm-url
ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect ol-docview doc-view
jka-compr image-mode exif ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi
gnus-score score-mode epa-file network-stream nsm mailalias rect
face-remap add-log make-mode emacs-news-mode mm-archive sort smiley
gnus-cite mail-extr textsec uni-scripts idna-mapping ucs-normalize
uni-confusable textsec-check qp misearch multi-isearch ebuild-mode
skeleton sh-script smie treesit executable vc-hg vc-git diff-mode vc-bzr
vc-src vc-sccs vc-svn vc-cvs vc-rcs log-view pcvs-util vc vc-dispatcher
server comp comp-cstr flyspell ispell gruvbox-dark-medium-theme gruvbox
autothemer color lisp-mnt dash mu4e mu4e-org mu4e-main mu4e-view
gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum
gnus-group gnus-undo gnus-start gnus-dbus dbus gnus-cloud nnimap nnmail
mail-source utf7 nnoo parse-time gnus-spec gnus-int gnus-range gnus-win
gnus nnheader range wid-edit mu4e-headers mu4e-compose mu4e-draft
mu4e-actions smtpmail mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
mu4e-message shr pixel-fill kinsoku url-file svg xml dom flow-fill
mule-util hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-server
mu4e-context mu4e-vars mu4e-helpers mu4e-config bookmark ido message
sendmail yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa
derived epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader auth-source-pass edmacro
kmacro use-package-bind-key bind-key use-package-ensure use-package-core
easy-mmode display-fill-column-indicator disp-table cl-extra
display-line-numbers yasnippet org ob ob-tangle ob-ref ob-lob ob-table
ob-exp org-macro org-footnote org-src ob-comint org-pcomplete pcomplete
org-list org-faces org-entities noutline outline org-version
ob-emacs-lisp ob-core ob-eval org-table oc-basic bibtex iso8601
time-date ol rx org-keys oc org-compat advice org-macs org-loaddefs
format-spec cal-menu calendar cal-loaddefs whitespace eglot array
filenotify jsonrpc ert pp ewoc debug backtrace find-func xref
flymake-proc flymake thingatpt warnings icons compile
text-property-search comint ansi-osc ansi-color pcase project imenu
site-gentoo magit-autoloads org-roam-autoloads magit-section-autoloads
emacsql-sqlite-autoloads yasnippet-autoloads git-commit-autoloads
use-package-autoloads bind-key-autoloads oauth2-autoloads
emacsql-autoloads gruvbox-theme-autoloads autothemer-autoloads
dash-autoloads with-editor-autoloads geiser-guile-autoloads geiser-impl
help-fns radix-tree help-mode geiser-custom geiser-base ring
geiser-autoloads info transient-autoloads package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win
term/common-win pgtk-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
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 emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads xwidget-internal dbusbind inotify dynamic-setting
font-render-setting cairo gtk pgtk lcms2 multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 965984 412328)
 (symbols 48 59263 39)
 (strings 32 208039 25577)
 (string-bytes 1 5924998)
 (vectors 16 115323)
 (vector-slots 8 2651886 744218)
 (floats 8 704 1556)
 (intervals 56 39870 6787)
 (buffers 992 59))
<#secure method=pgpmime mode=sign>

Have a most wonderful day,
-- 
Arsen Arsenović





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-26 14:42 bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere" Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-11-26 19:58 ` Eli Zaretskii
  2022-11-26 20:11   ` Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
                     ` (2 more replies)
  0 siblings, 3 replies; 26+ messages in thread
From: Eli Zaretskii @ 2022-11-26 19:58 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: 59618

> Date: Sat, 26 Nov 2022 15:42:27 +0100
> From:  Arsen Arsenović via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
> 
> If attempting to capture something while global-whitespace-mode is on,
> a second capture will fail with "Marker does not point anywhere".  The
> first capture attempt presumably succeeds since whitespace-mode didn't
> touch the buffer yet at time of searching.  Reproduction steps:
> 
> 1. emacs -Q --execute '(global-whitespace-mode)'
> 2. M-x org-capture RET t C-c C-c
> 2. M-x org-capture RET t

Isn't this a problem with org-capture?  Did you try reporting this to the
Org developers first?





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-26 19:58 ` Eli Zaretskii
@ 2022-11-26 20:11   ` Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-11-27  0:27   ` Ihor Radchenko
  2022-11-27  0:28   ` Ihor Radchenko
  2 siblings, 0 replies; 26+ messages in thread
From: Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-11-26 20:11 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 59618

[-- Attachment #1: Type: text/plain, Size: 402 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

> Isn't this a problem with org-capture?  Did you try reporting this to the
> Org developers first?

Oh, apologies.  I failed to realize the bugs for each were tracked
separately.

I'll file a report there (and refer to this one in case it spills over
into Emacs too).

Have a wonderful evening, and again, sorry about the fuss.
-- 
Arsen Arsenović

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 381 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-26 19:58 ` Eli Zaretskii
  2022-11-26 20:11   ` Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-11-27  0:27   ` Ihor Radchenko
  2022-11-27  6:13     ` Stefan Kangas
  2022-11-27  0:28   ` Ihor Radchenko
  2 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-11-27  0:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 59618, Arsen Arsenović

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Sat, 26 Nov 2022 15:42:27 +0100
>> From:  Arsen Arsenović via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>> 
>> If attempting to capture something while global-whitespace-mode is on,
>> a second capture will fail with "Marker does not point anywhere".  The
>> first capture attempt presumably succeeds since whitespace-mode didn't
>> touch the buffer yet at time of searching.  Reproduction steps:
>> 
>> 1. emacs -Q --execute '(global-whitespace-mode)'
>> 2. M-x org-capture RET t C-c C-c
>> 2. M-x org-capture RET t
>
> Isn't this a problem with org-capture?  Did you try reporting this to the
> Org developers first?

The error is thrown by global-whitespace-mode. Not by Org. Org just
intercepts the error in condition-case.

After following the above steps, please

4. Switch to .notes buffer
5. Select the last heading in the buffer
6. Kill it.
7. Observe the following backtrace

Debugger entered--Lisp error: (error "Marker does not point anywhere")
  whitespace--update-bob-eob(37 37 30)
  delete-and-extract-region(37 67)
  #f(compiled-function (beg end delete) #<bytecode 0x153349b8bed5a7f1>)(37 67 delete)
  apply(#f(compiled-function (beg end delete) #<bytecode 0x153349b8bed5a7f1>) (37 67 delete))
  #f(compiled-function (funs global args) #<bytecode -0xf0b0e52c36c522>)(nil nil (37 67 delete))
  buffer-substring--filter(37 67 delete)
  (let ((return-string (buffer-substring--filter beg end delete)) props-list) (if (or (string= "" return-string) (<= end beg) (eq org-fold-core-style 'overlays)) nil (let ((tail (org-fold-core-folding-spec-list))) (while tail (let ((spec (car tail))) (if (and (org-fold-core-region-folded-p beg end spec) (org-region-invisible-p beg end)) (progn (setq props-list ...))) (setq tail (cdr tail))))) (let ((tail (if (fboundp 'object-intervals) (object-intervals return-string) (seq-partition (cdr ...) 3)))) (while tail (let ((plist (car tail))) (let* ((start ...) (fin ...) (plist ...)) (if (listp plist) (progn ...))) (setq tail (cdr tail))))) (remove-text-properties 0 (length return-string) props-list return-string)) return-string)
  org-fold-core--buffer-substring-filter(37 67 delete)
  filter-buffer-substring(37 67 delete)
  #f(compiled-function (method) #<bytecode -0x2fea4bde9514e6c>)(delete)
  kill-region(37 67 region)
  funcall-interactively(kill-region 37 67 region)
  command-execute(kill-region)


-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-26 19:58 ` Eli Zaretskii
  2022-11-26 20:11   ` Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-11-27  0:27   ` Ihor Radchenko
@ 2022-11-27  0:28   ` Ihor Radchenko
  2 siblings, 0 replies; 26+ messages in thread
From: Ihor Radchenko @ 2022-11-27  0:28 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 59618, Arsen Arsenović

Eli Zaretskii <eliz@gnu.org> writes:

> Isn't this a problem with org-capture?  Did you try reporting this to the
> Org developers first?

Another note: I can only reproduce using Emacs 29. Emacs 28 does not err.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-27  0:27   ` Ihor Radchenko
@ 2022-11-27  6:13     ` Stefan Kangas
  2022-11-27  6:20       ` Ihor Radchenko
  0 siblings, 1 reply; 26+ messages in thread
From: Stefan Kangas @ 2022-11-27  6:13 UTC (permalink / raw)
  To: Ihor Radchenko, Eli Zaretskii; +Cc: 59618, Arsen Arsenović

Ihor Radchenko <yantar92@posteo.net> writes:

>>> 1. emacs -Q --execute '(global-whitespace-mode)'
>>> 2. M-x org-capture RET t C-c C-c
>>> 2. M-x org-capture RET t
>
> After following the above steps, please
>
> 4. Switch to .notes buffer
> 5. Select the last heading in the buffer
> 6. Kill it.
> 7. Observe the following backtrace

I fail to reproduce this bug using this recipe.

Could you please clarify what exactly you did in step 5 and 6?





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-27  6:13     ` Stefan Kangas
@ 2022-11-27  6:20       ` Ihor Radchenko
  2022-11-27  6:54         ` Stefan Kangas
  0 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-11-27  6:20 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 59618, Eli Zaretskii, Arsen Arsenović

Stefan Kangas <stefankangas@gmail.com> writes:

> I fail to reproduce this bug using this recipe.
>
> Could you please clarify what exactly you did in step 5 and 6?

Let me provide the detailed recipe I used:

1. rm ~/.notes (this is the default capture target)
2. emacs-29-vcs -Q --execute '(global-whitespace-mode)'
3. M-x org-capture <RET> t C-c C-c
4. M-x org-capture <RET> t
5. M-x toggle-debug-on-error
6. C-x b .notes
7. C-s %? <RET>
8. C-a
9. C-<SPC> M-> C-w

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-27  6:20       ` Ihor Radchenko
@ 2022-11-27  6:54         ` Stefan Kangas
  2022-12-01 12:06           ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Stefan Kangas @ 2022-11-27  6:54 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: 59618, Eli Zaretskii, Arsen Arsenović, Richard Hansen

Ihor Radchenko <yantar92@posteo.net> writes:

> Stefan Kangas <stefankangas@gmail.com> writes:
>
>> I fail to reproduce this bug using this recipe.
>>
>> Could you please clarify what exactly you did in step 5 and 6?
>
> Let me provide the detailed recipe I used:
>
> 1. rm ~/.notes (this is the default capture target)
> 2. emacs-29-vcs -Q --execute '(global-whitespace-mode)'
> 3. M-x org-capture <RET> t C-c C-c
> 4. M-x org-capture <RET> t
> 5. M-x toggle-debug-on-error
> 6. C-x b .notes
> 7. C-s %? <RET>
> 8. C-a
> 9. C-<SPC> M-> C-w

Thanks, I can reproduce the backtrace now.

Stepping through `whitespace--update-bob-eob' with edebug shows that the
`goto-char' in this fragment fails, because `whitespace-bob-marker' is
nil:

    (save-excursion
      (goto-char whitespace-bob-marker)
      ;; Any change in the first non-`empty'
      ;; line, even if it's not the first
      ;; character in the line, can potentially
      ;; cause subsequent lines to become
      ;; classified as `empty' (e.g., delete the
      ;; "x" from " x").
      (forward-line 1)
      (point))

The `whitespace--update-bob-eob' function is new in Emacs 29 and was
added in commit f47a5324f44e by Richard Hansen (in Cc).

Here is the backtrace again, for reference:

Debugger entered--Lisp error: (error "Marker does not point anywhere")
  whitespace--update-bob-eob(37 37 29)
  delete-and-extract-region(37 66)
  #f(compiled-function (beg end delete) #<bytecode
0x15337359c91d96f1>)(37 66 delete)
  apply(#f(compiled-function (beg end delete) #<bytecode
0x15337359c91d96f1>) (37 66 delete))
  #f(compiled-function (funs global args) #<bytecode
-0xf6c557b8176d62>)(nil nil (37 66 delete))
  buffer-substring--filter(37 66 delete)
  filter-buffer-substring(37 66 delete)
  #f(compiled-function (method) #<bytecode -0x2fb4b4ebabaf02c>)(delete)
  kill-region(37 66 region)
  funcall-interactively(kill-region 37 66 region)
  command-execute(kill-region)





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-11-27  6:54         ` Stefan Kangas
@ 2022-12-01 12:06           ` Eli Zaretskii
  2022-12-01 15:02             ` Stefan Kangas
  2022-12-13  6:25             ` Richard Hansen
  0 siblings, 2 replies; 26+ messages in thread
From: Eli Zaretskii @ 2022-12-01 12:06 UTC (permalink / raw)
  To: Stefan Kangas, rhansen; +Cc: 59618, yantar92, arsen

> From: Stefan Kangas <stefankangas@gmail.com>
> Date: Sat, 26 Nov 2022 22:54:25 -0800
> Cc: Eli Zaretskii <eliz@gnu.org>, 59618@debbugs.gnu.org, 
> 	Arsen Arsenović <arsen@aarsen.me>, 
> 	Richard Hansen <rhansen@rhansen.org>
> 
> Stepping through `whitespace--update-bob-eob' with edebug shows that the
> `goto-char' in this fragment fails, because `whitespace-bob-marker' is
> nil:

Is it really nil or is it a marker that "points nowhere"?

This part:

> Here is the backtrace again, for reference:
> 
> Debugger entered--Lisp error: (error "Marker does not point anywhere")
>   whitespace--update-bob-eob(37 37 29)

seems to indicate the latter.

Anyway, it sounds like the changes in f47a5324f44e caused the two markers,
whitespace-bob-marker and whitespace-eob-marker to sometimes "point
nowhere".  The band-aid patch below avoids the error reported in this bug,
but redisplay still complains in *Messsages*:

  Error during redisplay: (jit-lock-function 45) signaled (error "Marker does not point anywhere")

Richard, please chime in.

Here's the band-aid patch I promised:

diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 25ea07e..bed2a82 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -2315,7 +2315,11 @@ whitespace-post-command-hook
   (unless (and (eq whitespace-point (point))
                (not whitespace-buffer-changed))
     (when (and (not whitespace-buffer-changed)
-               (memq 'empty whitespace-active-style))
+               (memq 'empty whitespace-active-style)
+               (markerp whitespace-bob-marker)
+               (bufferp (marker-buffer whitespace-bob-marker))
+               (markerp whitespace-eob-marker)
+               (bufferp (marker-buffer whitespace-eob-marker)))
       ;; No need to handle the `whitespace-buffer-changed' case here
       ;; because that is taken care of by the `font-lock-multiline'
       ;; text property.
@@ -2422,6 +2426,8 @@ whitespace--update-bob-eob
         (widen)
         (let ((inhibit-read-only t))
           (when (or (null beg)
+                    (and (markerp whitespace-bob-marker)
+                         (bufferp (marker-buffer whitespace-bob-marker))
                     (<= beg (save-excursion
                               (goto-char whitespace-bob-marker)
                               ;; Any change in the first non-`empty'
@@ -2431,7 +2437,7 @@ whitespace--update-bob-eob
                               ;; classified as `empty' (e.g., delete the
                               ;; "x" from " x").
                               (forward-line 1)
-                              (point))))
+                              (point)))))
             (goto-char 1)
             (set-marker whitespace-bob-marker (point))
             (save-match-data
@@ -2440,11 +2446,13 @@ whitespace--update-bob-eob
                 (put-text-property (match-beginning 1) (match-end 1)
                                    'font-lock-multiline t))))
           (when (or (null end)
+                    (and (markerp whitespace-eob-marker)
+                         (bufferp (marker-buffer whitespace-eob-marker))
                     (>= end (save-excursion
                               (goto-char whitespace-eob-marker)
                               ;; See above comment for the BoB case.
                               (forward-line -1)
-                              (point))))
+                              (point)))))
             (goto-char (1+ (buffer-size)))
             (set-marker whitespace-eob-marker (point))
             (save-match-data





^ permalink raw reply related	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-01 12:06           ` Eli Zaretskii
@ 2022-12-01 15:02             ` Stefan Kangas
  2022-12-13  6:25             ` Richard Hansen
  1 sibling, 0 replies; 26+ messages in thread
From: Stefan Kangas @ 2022-12-01 15:02 UTC (permalink / raw)
  To: Eli Zaretskii, rhansen; +Cc: 59618, yantar92, arsen

Eli Zaretskii <eliz@gnu.org> writes:

>> Stepping through `whitespace--update-bob-eob' with edebug shows that the
>> `goto-char' in this fragment fails, because `whitespace-bob-marker' is
>> nil:
>
> Is it really nil or is it a marker that "points nowhere"?

I think it is the latter, yes.  Sorry for the confusion.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-01 12:06           ` Eli Zaretskii
  2022-12-01 15:02             ` Stefan Kangas
@ 2022-12-13  6:25             ` Richard Hansen
  2022-12-13  6:34               ` Ihor Radchenko
  1 sibling, 1 reply; 26+ messages in thread
From: Richard Hansen @ 2022-12-13  6:25 UTC (permalink / raw)
  To: Eli Zaretskii, Stefan Kangas; +Cc: 59618, yantar92, arsen


[-- Attachment #1.1: Type: text/plain, Size: 994 bytes --]

I believe this is caused by an interaction between indirect buffers and 
after-change-functions.  In the buffer with the error, 
whitespace--update-bob-eob is in after-change-functions even though 
whitespace-color-on (which is the only place that hook is registered) is 
never called on the buffer.  whitespace-color-on sets up state that 
whitespace--update-bob-eob depends on, which is why the error occurs.

I see no mention of after-change-functions in the documentation for 
indirect buffers, and no mention of indirect buffers in the 
documentation for after-change-functions.  I'm not sure how they're 
supposed to interact, so I'm not sure if this is a bug in whitespace, 
indirect buffers, or even org.  We could slap a bandaid on whitespace.el 
to work around this issue, but I'd rather fix this the right way.  I'm 
not sure what the right way is; if someone who understands indirect 
buffers could give me some tips I'd appreciate it.

bug#46982 might be related.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-13  6:25             ` Richard Hansen
@ 2022-12-13  6:34               ` Ihor Radchenko
  2022-12-13  6:38                 ` Richard Hansen
  0 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-12-13  6:34 UTC (permalink / raw)
  To: Richard Hansen; +Cc: 59618, Eli Zaretskii, arsen, Stefan Kangas

Richard Hansen <rhansen@rhansen.org> writes:

> I believe this is caused by an interaction between indirect buffers and 
> after-change-functions.  In the buffer with the error, 
> whitespace--update-bob-eob is in after-change-functions even though 
> whitespace-color-on (which is the only place that hook is registered) is 
> never called on the buffer.  whitespace-color-on sets up state that 
> whitespace--update-bob-eob depends on, which is why the error occurs.

Org's capture buffer is created by calling `make-indirect-buffer' with
CLONE argument.  This makes Emacs clone buffer local variables,
including `after-change-functions'.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-13  6:34               ` Ihor Radchenko
@ 2022-12-13  6:38                 ` Richard Hansen
  2022-12-13  6:48                   ` Ihor Radchenko
  0 siblings, 1 reply; 26+ messages in thread
From: Richard Hansen @ 2022-12-13  6:38 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: 59618, Eli Zaretskii, arsen, Stefan Kangas


[-- Attachment #1.1: Type: text/plain, Size: 337 bytes --]

On 12/13/22 01:34, Ihor Radchenko wrote:
> Org's capture buffer is created by calling `make-indirect-buffer' with
> CLONE argument.  This makes Emacs clone buffer local variables,
> including `after-change-functions'.

Sounds like setting CLONE to t does not clone markers.  That sounds like 
a bug in `make-indirect-buffer', no?

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-13  6:38                 ` Richard Hansen
@ 2022-12-13  6:48                   ` Ihor Radchenko
  2022-12-14  2:42                     ` Richard Hansen
  0 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-12-13  6:48 UTC (permalink / raw)
  To: Richard Hansen; +Cc: 59618, Eli Zaretskii, arsen, Stefan Kangas

Richard Hansen <rhansen@rhansen.org> writes:

> On 12/13/22 01:34, Ihor Radchenko wrote:
>> Org's capture buffer is created by calling `make-indirect-buffer' with
>> CLONE argument.  This makes Emacs clone buffer local variables,
>> including `after-change-functions'.
>
> Sounds like setting CLONE to t does not clone markers.  That sounds like 
> a bug in `make-indirect-buffer', no?

AFAIK, it does clone markers. Also changing marker buffer appropriately.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-13  6:48                   ` Ihor Radchenko
@ 2022-12-14  2:42                     ` Richard Hansen
  2022-12-14 12:09                       ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Richard Hansen @ 2022-12-14  2:42 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: 59618, Eli Zaretskii, arsen, Stefan Kangas


[-- Attachment #1.1: Type: text/plain, Size: 603 bytes --]

On 12/13/22 01:48, Ihor Radchenko wrote:
> Richard Hansen <rhansen@rhansen.org> writes:
>> Sounds like setting CLONE to t does not clone markers.  That sounds like
>> a bug in `make-indirect-buffer', no?
> 
> AFAIK, it does clone markers. Also changing marker buffer appropriately.

Hmm, maybe not.  The following fails:

emacs -Q

(progn
   (whitespace-mode 1)
   (with-current-buffer (clone-indirect-buffer "foo" nil)
     (cl-assert (eq (current-buffer)
                    (marker-buffer whitespace-bob-marker)))))

C-x C-e

I don't know if this is working as intended or a bug.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14  2:42                     ` Richard Hansen
@ 2022-12-14 12:09                       ` Eli Zaretskii
  2022-12-14 14:15                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2022-12-14 12:09 UTC (permalink / raw)
  To: Richard Hansen, Stefan Monnier; +Cc: 59618, yantar92, arsen, stefankangas

> Date: Tue, 13 Dec 2022 21:42:35 -0500
> Cc: Eli Zaretskii <eliz@gnu.org>, Stefan Kangas <stefankangas@gmail.com>,
>  59618@debbugs.gnu.org, arsen@aarsen.me
> From: Richard Hansen <rhansen@rhansen.org>
> 
> On 12/13/22 01:48, Ihor Radchenko wrote:
> > Richard Hansen <rhansen@rhansen.org> writes:
> >> Sounds like setting CLONE to t does not clone markers.  That sounds like
> >> a bug in `make-indirect-buffer', no?
> > 
> > AFAIK, it does clone markers. Also changing marker buffer appropriately.
> 
> Hmm, maybe not.  The following fails:
> 
> emacs -Q
> 
> (progn
>    (whitespace-mode 1)
>    (with-current-buffer (clone-indirect-buffer "foo" nil)
>      (cl-assert (eq (current-buffer)
>                     (marker-buffer whitespace-bob-marker)))))
> 
> C-x C-e
> 
> I don't know if this is working as intended or a bug.

Adding Stefan, in case he has comments.





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14 12:09                       ` Eli Zaretskii
@ 2022-12-14 14:15                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-14 15:08                           ` Ihor Radchenko
  0 siblings, 1 reply; 26+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-14 14:15 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 59618, yantar92, arsen, stefankangas, Richard Hansen

>> >> Sounds like setting CLONE to t does not clone markers.  That sounds like
>> >> a bug in `make-indirect-buffer', no?
>> > 
>> > AFAIK, it does clone markers. Also changing marker buffer appropriately.
>> 
>> Hmm, maybe not.  The following fails:
>> 
>> emacs -Q
>> 
>> (progn
>>    (whitespace-mode 1)
>>    (with-current-buffer (clone-indirect-buffer "foo" nil)
>>      (cl-assert (eq (current-buffer)
>>                     (marker-buffer whitespace-bob-marker)))))

the buffer cloning code can't know that a given marker is stored in a variable.
So when it clones the variables, both buffers's `whitespace-bob-marker`
variable will point to the same marker.

While we could try and solve it for this specific case by looking for
buffer-local variables that contains markers, the problem is much more
general (think of the case where the buffer var contains a list of
markers, or a hash-table containing markers, or ...), so `clone-buffer`
does not try to solve it.

Instead modes that use such variables are responsable to setup
a `clone-buffer-hook` that does the necessary work.


        Stefan






^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14 14:15                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-14 15:08                           ` Ihor Radchenko
  2022-12-14 17:40                             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-12-14 15:08 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 59618, Eli Zaretskii, arsen, stefankangas, Richard Hansen

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Instead modes that use such variables are responsable to setup
> a `clone-buffer-hook` that does the necessary work.

*clone-indirect-buffer-hook





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14 15:08                           ` Ihor Radchenko
@ 2022-12-14 17:40                             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-14 17:48                               ` Ihor Radchenko
  0 siblings, 1 reply; 26+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-14 17:40 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: 59618, Eli Zaretskii, arsen, stefankangas, Richard Hansen

Ihor Radchenko [2022-12-14 15:08:34] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Instead modes that use such variables are responsable to setup
>> a `clone-buffer-hook` that does the necessary work.
>
> *clone-indirect-buffer-hook

For indirect clones, yes.  The original motivation for this infrastructure
was Info where we use `clone-buffer` and hence `clone-buffer-hook`.


        Stefan






^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14 17:40                             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-14 17:48                               ` Ihor Radchenko
  2022-12-14 20:10                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-12-14 17:48 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 59618, Eli Zaretskii, arsen, stefankangas, Richard Hansen

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Ihor Radchenko [2022-12-14 15:08:34] wrote:
>> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> Instead modes that use such variables are responsable to setup
>>> a `clone-buffer-hook` that does the necessary work.
>>
>> *clone-indirect-buffer-hook
>
> For indirect clones, yes.  The original motivation for this infrastructure
> was Info where we use `clone-buffer` and hence `clone-buffer-hook`.

I see. Though `clone-indirect-buffer-hook' is probably more appropriate
to be used in the context of this bug report.

Side note: Org implements something similar to `clone-buffer', but for
file visiting buffers (`org-export-copy-buffer`). Would it be something
of interest for Emacs?

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14 17:48                               ` Ihor Radchenko
@ 2022-12-14 20:10                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-18  9:24                                   ` bug#59618: [PATCH] " Richard Hansen
  0 siblings, 1 reply; 26+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-14 20:10 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: 59618, Eli Zaretskii, arsen, stefankangas, Richard Hansen

>> For indirect clones, yes.  The original motivation for this infrastructure
>> was Info where we use `clone-buffer` and hence `clone-buffer-hook`.
> I see.  Though `clone-indirect-buffer-hook' is probably more appropriate
> to be used in the context of this bug report.

If `org-capture` uses an indirect buffer, indeed.
Modes which can be used with both should setup both hooks.

> Side note: Org implements something similar to `clone-buffer', but for
> file visiting buffers (`org-export-copy-buffer`).  Would it be something
> of interest for Emacs?

There seems to be a lot of overlap with `clone-buffer`, so it would make
sense to try and merge them, yes.  I don't think we want to
support/encourage situations where we have multiple buffers with the
same `buffer-file-name` like `org-export-copy-buffer` creates, but we
could provide some alternative where the clone has `buffer-file-name`
set to nil but the old value (or the origin bugger) is recorded in
another buffer-local var.


        Stefan






^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: [PATCH] Re: bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-14 20:10                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-18  9:24                                   ` Richard Hansen
  2022-12-20  0:41                                     ` bug#59618: [PATCH] " Richard Hansen
  0 siblings, 1 reply; 26+ messages in thread
From: Richard Hansen @ 2022-12-18  9:24 UTC (permalink / raw)
  To: Stefan Monnier, Ihor Radchenko; +Cc: 59618, Eli Zaretskii, arsen, stefankangas


[-- Attachment #1.1.1: Type: text/plain, Size: 171 bytes --]

Attached is a patch that should fix this issue.  I have some other 
`whitespace-mode' fixes in progress; I'll open new issues (or reply to 
existing issues) for those.

[-- Attachment #1.1.2: 0001-whitespace-Avoid-mutating-original-buffer-s-markers-.patch --]
[-- Type: text/x-patch, Size: 6859 bytes --]

From c22833b22cb0a1cb631bfc1fe04881d7ee9bf3d1 Mon Sep 17 00:00:00 2001
From: Richard Hansen <rhansen@rhansen.org>
Date: Tue, 13 Dec 2022 01:33:43 -0500
Subject: [PATCH] whitespace: Avoid mutating original buffer's markers in
 clones

* lisp/whitespace.el (whitespace--clone): New hook function that is
run after cloning a buffer that copies `whitespace-bob-marker' and
`whitespace-eob-marker' and changes the copies to point to the new
buffer (Bug#59618).
(whitespace-color-on): Register the hook function.
(whitespace-color-off): Unregister the hook function.
---
 lisp/whitespace.el            | 15 +++++++
 test/lisp/whitespace-tests.el | 75 +++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+)

diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 25ea07e9db..2c1520ec6a 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -2093,6 +2093,17 @@ whitespace-style-face-p
        t))
 
 
+(defun whitespace--clone ()
+  "Hook function run after `make-indirect-buffer' and `clone-buffer'."
+  (when (whitespace-style-face-p)
+    (setq-local whitespace-bob-marker
+                (copy-marker (marker-position whitespace-bob-marker)
+                             (marker-insertion-type whitespace-bob-marker)))
+    (setq-local whitespace-eob-marker
+                (copy-marker (marker-position whitespace-eob-marker)
+                             (marker-insertion-type whitespace-eob-marker)))))
+
+
 (defun whitespace-color-on ()
   "Turn on color visualization."
   (when (whitespace-style-face-p)
@@ -2111,6 +2122,8 @@ whitespace-color-on
               ;; The -1 ensures that it runs before any
               ;; `font-lock-mode' hook functions.
               -1 t)
+    (add-hook 'clone-buffer-hook #'whitespace--clone nil t)
+    (add-hook 'clone-indirect-buffer-hook #'whitespace--clone nil t)
     ;; Add whitespace-mode color into font lock.
     (setq
      whitespace-font-lock-keywords
@@ -2204,6 +2217,8 @@ whitespace-color-off
     (remove-hook 'before-change-functions #'whitespace-buffer-changed t)
     (remove-hook 'after-change-functions #'whitespace--update-bob-eob
                  t)
+    (remove-hook 'clone-buffer-hook #'whitespace--clone t)
+    (remove-hook 'clone-indirect-buffer-hook #'whitespace--clone t)
     (font-lock-remove-keywords nil whitespace-font-lock-keywords)
     (font-lock-flush)))
 
diff --git a/test/lisp/whitespace-tests.el b/test/lisp/whitespace-tests.el
index fb53543c9e..330fc335ea 100644
--- a/test/lisp/whitespace-tests.el
+++ b/test/lisp/whitespace-tests.el
@@ -42,6 +42,13 @@ whitespace-tests--with-test-buffer
           '(whitespace-mode 1))
        ,@body)))
 
+(defmacro whitespace--with-buffer-selected (buffer-or-name &rest body)
+  (declare (debug (form body)) (indent 1))
+  `(save-window-excursion
+     (with-current-buffer (or ,buffer-or-name (current-buffer))
+       (with-selected-window (display-buffer (current-buffer))
+         ,@body))))
+
 (defun whitespace-tests--faceup (&rest lines)
   "Convenience wrapper around `faceup-test-font-lock-buffer'.
 Returns non-nil if the concatenated LINES match the current
@@ -327,6 +334,74 @@ whitespace-tests--empty-bob-eob-read-only-buffer
                                         "«:whitespace-empty:\n"
                                         "»")))))
 
+(ert-deftest whitespace-tests--indirect-clone-breaks-base-markers ()
+  "Specific regression test for Bug#59618."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((base (current-buffer))
+          ;; `unwind-protect' is not used to clean up `indirect'
+          ;; because the buffer should only be killed on success.
+          (indirect (clone-indirect-buffer (buffer-name) nil)))
+      (should (eq (marker-buffer whitespace-bob-marker) base))
+      (should (eq (marker-buffer whitespace-eob-marker) base))
+      (whitespace--with-buffer-selected indirect
+        ;; Mutate the indirect buffer to update its bob/eob markers.
+        (execute-kbd-macro (kbd "z RET M-< a")))
+      ;; With Bug#59618, the above mutation would cause the base
+      ;; buffer's markers to point inside the indirect buffer because
+      ;; the indirect buffer erroneously shared marker objects with
+      ;; the base buffer.  Killing the indirect buffer would then
+      ;; invalidate those markers (make them point nowhere).
+      (kill-buffer indirect)
+      (should (eq (marker-buffer whitespace-bob-marker) base))
+      (should (eq (marker-buffer whitespace-eob-marker) base)))))
+
+(defun whitespace-tests--check-markers (buf bpos epos)
+  (with-current-buffer buf
+    (should (eq (marker-buffer whitespace-bob-marker) buf))
+    (should (eq (marker-position whitespace-bob-marker) bpos))
+    (should (eq (marker-buffer whitespace-eob-marker) buf))
+    (should (eq (marker-position whitespace-eob-marker) epos))))
+
+(ert-deftest whitespace-tests--indirect-clone-markers ()
+  "Test `whitespace--clone' on indirect clones."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((base (current-buffer))
+          ;; `unwind-protect' is not used to clean up `indirect'
+          ;; because the buffer should only be killed on success.
+          (indirect (clone-indirect-buffer nil nil)))
+      (whitespace-tests--check-markers base 2 4)
+      (whitespace--with-buffer-selected indirect
+        (whitespace-tests--check-markers indirect 2 4)
+        ;; Mutate the buffer to trigger `after-change-functions' and
+        ;; thus `whitespace--update-bob-eob'.
+        (execute-kbd-macro (kbd "z RET M-< a"))
+        (whitespace-tests--check-markers indirect 1 8))
+      (kill-buffer indirect)
+      ;; When the buffer was modified above, the new "a" character at
+      ;; the beginning moved the base buffer's markers by one.  Emacs
+      ;; did not run the base buffer's `after-change-functions' after
+      ;; the indirect buffer was edited (Bug#46982), so the end result
+      ;; is just the shift by one.
+      (whitespace-tests--check-markers base 3 5))))
+
+(ert-deftest whitespace-tests--regular-clone-markers ()
+  "Test `whitespace--clone' on regular clones."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((orig (current-buffer))
+          ;; `unwind-protect' is not used to clean up `clone' because
+          ;; the buffer should only be killed on success.
+          (clone (clone-buffer)))
+      (whitespace-tests--check-markers orig 2 4)
+      (whitespace--with-buffer-selected clone
+        (whitespace-tests--check-markers clone 2 4)
+        (execute-kbd-macro (kbd "z RET M-< a"))
+        (whitespace-tests--check-markers clone 1 8))
+      (kill-buffer clone)
+      (whitespace-tests--check-markers orig 2 4))))
+
 (provide 'whitespace-tests)
 
 ;;; whitespace-tests.el ends here
-- 
2.39.0


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* bug#59618: [PATCH] bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-18  9:24                                   ` bug#59618: [PATCH] " Richard Hansen
@ 2022-12-20  0:41                                     ` Richard Hansen
  2022-12-20 13:52                                       ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Richard Hansen @ 2022-12-20  0:41 UTC (permalink / raw)
  To: Stefan Monnier, Ihor Radchenko; +Cc: 59618, Eli Zaretskii, arsen, stefankangas


[-- Attachment #1.1.1: Type: text/plain, Size: 130 bytes --]

Attached is a new version of the patch.  The only change is that it was rebased onto latest emacs-29 so that it applies cleanly.

[-- Attachment #1.1.2: 0001-whitespace-Avoid-mutating-original-buffer-s-markers-.patch --]
[-- Type: text/x-patch, Size: 6806 bytes --]

From 41b0e596f32769f9601bcb3cc1f91cc2cb36641e Mon Sep 17 00:00:00 2001
From: Richard Hansen <rhansen@rhansen.org>
Date: Tue, 13 Dec 2022 01:33:43 -0500
Subject: [PATCH] whitespace: Avoid mutating original buffer's markers in
 clones

* lisp/whitespace.el (whitespace--clone): New hook function that is
run after cloning a buffer that copies `whitespace-bob-marker' and
`whitespace-eob-marker' and changes the copies to point to the new
buffer (Bug#59618).
(whitespace-color-on): Register the hook function.
(whitespace-color-off): Unregister the hook function.
---
 lisp/whitespace.el            | 15 +++++++
 test/lisp/whitespace-tests.el | 75 +++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+)

diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 9bc6ad9db4..558be1841a 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -2093,6 +2093,17 @@ whitespace-style-face-p
        t))
 
 
+(defun whitespace--clone ()
+  "Hook function run after `make-indirect-buffer' and `clone-buffer'."
+  (when (whitespace-style-face-p)
+    (setq-local whitespace-bob-marker
+                (copy-marker (marker-position whitespace-bob-marker)
+                             (marker-insertion-type whitespace-bob-marker)))
+    (setq-local whitespace-eob-marker
+                (copy-marker (marker-position whitespace-eob-marker)
+                             (marker-insertion-type whitespace-eob-marker)))))
+
+
 (defun whitespace-color-on ()
   "Turn on color visualization."
   (when (whitespace-style-face-p)
@@ -2111,6 +2122,8 @@ whitespace-color-on
               ;; The -1 ensures that it runs before any
               ;; `font-lock-mode' hook functions.
               -1 t)
+    (add-hook 'clone-buffer-hook #'whitespace--clone nil t)
+    (add-hook 'clone-indirect-buffer-hook #'whitespace--clone nil t)
     ;; Add whitespace-mode color into font lock.
     (setq
      whitespace-font-lock-keywords
@@ -2204,6 +2217,8 @@ whitespace-color-off
     (remove-hook 'before-change-functions #'whitespace-buffer-changed t)
     (remove-hook 'after-change-functions #'whitespace--update-bob-eob
                  t)
+    (remove-hook 'clone-buffer-hook #'whitespace--clone t)
+    (remove-hook 'clone-indirect-buffer-hook #'whitespace--clone t)
     (font-lock-remove-keywords nil whitespace-font-lock-keywords)
     (font-lock-flush)))
 
diff --git a/test/lisp/whitespace-tests.el b/test/lisp/whitespace-tests.el
index 3e94d7e921..12f6cb99a2 100644
--- a/test/lisp/whitespace-tests.el
+++ b/test/lisp/whitespace-tests.el
@@ -42,6 +42,13 @@ whitespace-tests--with-test-buffer
           '(whitespace-mode 1))
        ,@body)))
 
+(defmacro whitespace--with-buffer-selected (buffer-or-name &rest body)
+  (declare (debug (form body)) (indent 1))
+  `(save-window-excursion
+     (with-current-buffer (or ,buffer-or-name (current-buffer))
+       (with-selected-window (display-buffer (current-buffer))
+         ,@body))))
+
 (defun whitespace-tests--faceup (&rest lines)
   "Convenience wrapper around `faceup-test-font-lock-buffer'.
 Returns non-nil if the concatenated LINES match the current
@@ -337,6 +344,74 @@ whitespace-tests--empty-bob-eob-modified
       (whitespace-mode 1)
       (should (not (buffer-modified-p))))))
 
+(ert-deftest whitespace-tests--indirect-clone-breaks-base-markers ()
+  "Specific regression test for Bug#59618."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((base (current-buffer))
+          ;; `unwind-protect' is not used to clean up `indirect'
+          ;; because the buffer should only be killed on success.
+          (indirect (clone-indirect-buffer (buffer-name) nil)))
+      (should (eq (marker-buffer whitespace-bob-marker) base))
+      (should (eq (marker-buffer whitespace-eob-marker) base))
+      (whitespace--with-buffer-selected indirect
+        ;; Mutate the indirect buffer to update its bob/eob markers.
+        (execute-kbd-macro (kbd "z RET M-< a")))
+      ;; With Bug#59618, the above mutation would cause the base
+      ;; buffer's markers to point inside the indirect buffer because
+      ;; the indirect buffer erroneously shared marker objects with
+      ;; the base buffer.  Killing the indirect buffer would then
+      ;; invalidate those markers (make them point nowhere).
+      (kill-buffer indirect)
+      (should (eq (marker-buffer whitespace-bob-marker) base))
+      (should (eq (marker-buffer whitespace-eob-marker) base)))))
+
+(defun whitespace-tests--check-markers (buf bpos epos)
+  (with-current-buffer buf
+    (should (eq (marker-buffer whitespace-bob-marker) buf))
+    (should (eq (marker-position whitespace-bob-marker) bpos))
+    (should (eq (marker-buffer whitespace-eob-marker) buf))
+    (should (eq (marker-position whitespace-eob-marker) epos))))
+
+(ert-deftest whitespace-tests--indirect-clone-markers ()
+  "Test `whitespace--clone' on indirect clones."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((base (current-buffer))
+          ;; `unwind-protect' is not used to clean up `indirect'
+          ;; because the buffer should only be killed on success.
+          (indirect (clone-indirect-buffer nil nil)))
+      (whitespace-tests--check-markers base 2 4)
+      (whitespace--with-buffer-selected indirect
+        (whitespace-tests--check-markers indirect 2 4)
+        ;; Mutate the buffer to trigger `after-change-functions' and
+        ;; thus `whitespace--update-bob-eob'.
+        (execute-kbd-macro (kbd "z RET M-< a"))
+        (whitespace-tests--check-markers indirect 1 8))
+      (kill-buffer indirect)
+      ;; When the buffer was modified above, the new "a" character at
+      ;; the beginning moved the base buffer's markers by one.  Emacs
+      ;; did not run the base buffer's `after-change-functions' after
+      ;; the indirect buffer was edited (Bug#46982), so the end result
+      ;; is just the shift by one.
+      (whitespace-tests--check-markers base 3 5))))
+
+(ert-deftest whitespace-tests--regular-clone-markers ()
+  "Test `whitespace--clone' on regular clones."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((orig (current-buffer))
+          ;; `unwind-protect' is not used to clean up `clone' because
+          ;; the buffer should only be killed on success.
+          (clone (clone-buffer)))
+      (whitespace-tests--check-markers orig 2 4)
+      (whitespace--with-buffer-selected clone
+        (whitespace-tests--check-markers clone 2 4)
+        (execute-kbd-macro (kbd "z RET M-< a"))
+        (whitespace-tests--check-markers clone 1 8))
+      (kill-buffer clone)
+      (whitespace-tests--check-markers orig 2 4))))
+
 (provide 'whitespace-tests)
 
 ;;; whitespace-tests.el ends here
-- 
2.39.0


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* bug#59618: [PATCH] bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-20  0:41                                     ` bug#59618: [PATCH] " Richard Hansen
@ 2022-12-20 13:52                                       ` Eli Zaretskii
  2022-12-21 13:34                                         ` Ihor Radchenko
  0 siblings, 1 reply; 26+ messages in thread
From: Eli Zaretskii @ 2022-12-20 13:52 UTC (permalink / raw)
  To: Richard Hansen, yantar92; +Cc: 59618, arsen, monnier, stefankangas

> Date: Mon, 19 Dec 2022 19:41:31 -0500
> From: Richard Hansen <rhansen@rhansen.org>
> Cc: Eli Zaretskii <eliz@gnu.org>, stefankangas@gmail.com,
>  59618@debbugs.gnu.org, arsen@aarsen.me
> Attached is a new version of the patch.  The only change is that it was rebased onto latest emacs-29 so that it applies cleanly.

Thanks.

Ihor, would you please see if this fixes the problem, so that we could
install it?





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: [PATCH] bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-20 13:52                                       ` Eli Zaretskii
@ 2022-12-21 13:34                                         ` Ihor Radchenko
  2022-12-21 14:03                                           ` Eli Zaretskii
  0 siblings, 1 reply; 26+ messages in thread
From: Ihor Radchenko @ 2022-12-21 13:34 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 59618, arsen, stefankangas, monnier, Richard Hansen

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Mon, 19 Dec 2022 19:41:31 -0500
>> From: Richard Hansen <rhansen@rhansen.org>
>> Cc: Eli Zaretskii <eliz@gnu.org>, stefankangas@gmail.com,
>>  59618@debbugs.gnu.org, arsen@aarsen.me
>> Attached is a new version of the patch.  The only change is that it was rebased onto latest emacs-29 so that it applies cleanly.
>
> Thanks.
>
> Ihor, would you please see if this fixes the problem, so that we could
> install it?

I can no longer reproduce the problem following the given recipe after
applying the patch.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





^ permalink raw reply	[flat|nested] 26+ messages in thread

* bug#59618: [PATCH] bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere"
  2022-12-21 13:34                                         ` Ihor Radchenko
@ 2022-12-21 14:03                                           ` Eli Zaretskii
  0 siblings, 0 replies; 26+ messages in thread
From: Eli Zaretskii @ 2022-12-21 14:03 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: 59618-done, arsen, stefankangas, monnier, rhansen

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: Richard Hansen <rhansen@rhansen.org>, monnier@iro.umontreal.ca,
>  stefankangas@gmail.com, 59618@debbugs.gnu.org, arsen@aarsen.me
> Date: Wed, 21 Dec 2022 13:34:47 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Ihor, would you please see if this fixes the problem, so that we could
> > install it?
> 
> I can no longer reproduce the problem following the given recipe after
> applying the patch.

Thanks, so I've now installed the patch, and I'm closing the bug.





^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2022-12-21 14:03 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-26 14:42 bug#59618: 29.0.50; global-whitespace-mode + org-capture: "Marker does not point anywhere" Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-11-26 19:58 ` Eli Zaretskii
2022-11-26 20:11   ` Arsen Arsenović via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-11-27  0:27   ` Ihor Radchenko
2022-11-27  6:13     ` Stefan Kangas
2022-11-27  6:20       ` Ihor Radchenko
2022-11-27  6:54         ` Stefan Kangas
2022-12-01 12:06           ` Eli Zaretskii
2022-12-01 15:02             ` Stefan Kangas
2022-12-13  6:25             ` Richard Hansen
2022-12-13  6:34               ` Ihor Radchenko
2022-12-13  6:38                 ` Richard Hansen
2022-12-13  6:48                   ` Ihor Radchenko
2022-12-14  2:42                     ` Richard Hansen
2022-12-14 12:09                       ` Eli Zaretskii
2022-12-14 14:15                         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-14 15:08                           ` Ihor Radchenko
2022-12-14 17:40                             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-14 17:48                               ` Ihor Radchenko
2022-12-14 20:10                                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-18  9:24                                   ` bug#59618: [PATCH] " Richard Hansen
2022-12-20  0:41                                     ` bug#59618: [PATCH] " Richard Hansen
2022-12-20 13:52                                       ` Eli Zaretskii
2022-12-21 13:34                                         ` Ihor Radchenko
2022-12-21 14:03                                           ` Eli Zaretskii
2022-11-27  0:28   ` Ihor Radchenko

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).