GNU bug report logs -
#64117
28.2; "gnus-request-set-mark: Buffer is read-only" when exiting agentized, unplugged summary buffer
Previous Next
Reported by: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>
Date: Fri, 16 Jun 2023 18:59:01 UTC
Severity: normal
Found in version 28.2
Done: Jens Schmidt <jschmidt4gnu <at> vodafonemail.de>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
This issue should be also present in Emacs master, judging by the
code. However I have reproduced this issue only in my
"production Emacs" on 28.2 and, in particular, *not* in an "emacs
-Q" environment. Gnus setup complete with IMAP and all is
finicky, so probably you accept this bug report without all that.
Here are the steps to reproduce the issue:
- Ensure you have an agentized nnimap group G with some unread
articles.
- Ensure Gnus is unplugged.
- Enter group G from the *Group* buffer by pressing "RET" on it.
- Mark some unread articles in the summary buffer of G as "read"
by positioning point on them and pressing "d".
- Exit group G from the summary buffer by pressing "q".
The last step results in an error
gnus-request-set-mark: Buffer is read-only: #<buffer *Summary
nnimap+<host>:INBOX*>
for me.
Expected result is that the agent writes the information on the
marks that have changed while unplugged to a separate file which
it later, when Gnus gets plugged again, replays.
The reason for the bug us most likely commit
https://git.savannah.gnu.org/cgit/emacs.git/commit/src?id=cb12a84f2c519a48dd87453c925e3bc36d9944db
and here the change
* lisp/gnus/nnagent.el: Don't use a unibyte buffer.
The author has removed a macro call to `mm-with-unibyte-buffer'
in function `nnagent-request-set-mark' without replacing it by,
for example, a call to `with-temp-buffer'. Accordingly, function
`nnagent-request-set-mark' tries to operate on the current
buffer, which happens to be the read-only summary buffer.
Adding a `with-temp-buffer' around the inserts and the call to
`write-region' fixes this issue (showing 28.2-based code):
(deffoo nnagent-request-set-mark (group action server)
(with-temp-buffer
(insert "(gnus-agent-synchronize-group-flags \""
group
"\" '")
(gnus-pp action)
(insert " \""
(gnus-method-to-server gnus-command-method)
"\"")
(insert ")\n")
(let ((coding-system-for-write nnheader-file-coding-system))
(write-region (point-min) (point-max) (gnus-agent-lib-file "flags")
t 'silent)))
;; Also set the marks for the original back end that keeps marks in
;; the local system.
(let ((gnus-agent nil))
(when (and (memq (car gnus-command-method) '(nntp))
(gnus-check-backend-function 'request-set-mark
(car gnus-command-method)))
(funcall (gnus-get-function gnus-command-method 'request-set-mark)
group action server)))
nil)
I could provide a patch on emacs-29 but only without actually
testing it...
This bug report was last modified 1 year and 331 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.