From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.bugs Subject: bug#70579: 30.0.50; gnus: Wrong unread count in the Group buffer Date: Thu, 09 May 2024 23:23:37 -0700 Message-ID: <87msoyqj6e.fsf@ericabrahamsen.net> References: <87ttjo7q98.fsf@outlook.com> <87sez83foa.fsf@ericabrahamsen.net> <864jb78nbd.fsf@gnu.org> <87wmo2qptg.fsf@ericabrahamsen.net> <87seyqqp5w.fsf@ericabrahamsen.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11813"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: 70579@debbugs.gnu.org, jimjoe@gmx.net To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri May 10 08:24:50 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1s5JgY-0002on-IW for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 10 May 2024 08:24:50 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s5JgF-0000s0-L5; Fri, 10 May 2024 02:24:31 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s5Jfo-0000rH-2I for bug-gnu-emacs@gnu.org; Fri, 10 May 2024 02:24:05 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s5Jfn-00050k-PI for bug-gnu-emacs@gnu.org; Fri, 10 May 2024 02:24:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1s5Jfm-0007dX-8Z for bug-gnu-emacs@gnu.org; Fri, 10 May 2024 02:24:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eric Abrahamsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 10 May 2024 06:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 70579 X-GNU-PR-Package: emacs Original-Received: via spool by 70579-submit@debbugs.gnu.org id=B70579.171532223929349 (code B ref 70579); Fri, 10 May 2024 06:24:02 +0000 Original-Received: (at 70579) by debbugs.gnu.org; 10 May 2024 06:23:59 +0000 Original-Received: from localhost ([127.0.0.1]:41592 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s5Jfi-0007dJ-SM for submit@debbugs.gnu.org; Fri, 10 May 2024 02:23:59 -0400 Original-Received: from mail.ericabrahamsen.net ([52.70.2.18]:37626) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s5Jfe-0007d9-6c for 70579@debbugs.gnu.org; Fri, 10 May 2024 02:23:57 -0400 Original-Received: from localhost (71-212-21-65.tukw.qwest.net [71.212.21.65]) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id 01668FA09E; Fri, 10 May 2024 06:23:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericabrahamsen.net; s=mail; t=1715322228; bh=e6Ck97VwQuMG2geXHIFMxcV3u+nq0gkG5vjOKcT6mb8=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=SNDsmrxNDcX0+b7wiQKLMXrJ29Kh2WnPVMg0RR57MUE/kFKnGjKnRK5vHLQdaYVwJ d2i3aa//EuehK1yp7wyARcjLcrC+M2kdboS9JcOOpkiklyGx1oJc6OtxanhhVl7K3t AzKEG/3SEcDBALWRLyvznvVByMe0JGMkKB7DeVGc= In-Reply-To: <87seyqqp5w.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Thu, 09 May 2024 21:14:19 -0700") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:284800 Archived-At: --=-=-= Content-Type: text/plain Eric Abrahamsen writes: > Eric Abrahamsen writes: > >> Eli Zaretskii writes: >> >>> Ping! Eric, can we make some progress here? >>> >>>> Cc: jimjoe@gmx.net >>>> From: Eric Abrahamsen >>>> Date: Thu, 25 Apr 2024 21:34:45 -0700 >>>> >>>> James Thomas via "Bug reports for GNU Emacs, the Swiss army knife of >>>> text editors" writes: >>>> >>>> > - (Preferably starting with an empty drafts folder) Compose a message >>>> > and save it. >>>> > - Open the drafts group, press e on the message and then kill the new >>>> > buffer; then (incidentally, if you now do '/ N' then this bug does not >>>> > arise) delete the message (B DEL) >>>> > - Press q >>>> > - The message count is wrong (but can be corrected with M-g) >>>> > >>>> > cf. In gnus.general (gnus-summary-goto-article "87y192lr8f.fsf@gmx.net") >> >> I've made some progress here -- the root of the problem seems to be >> that, when we hit "e" in the draft summary buffer to resume editing a >> draft, Gnus "jumps ahead" in message numbers. Basically what "editing" >> actually means is that the old draft is deleted, and a new draft is >> started, but the new draft has a article number that's the previous >> draft's number + 2, and the "draft" group's active number is also >> inflated (for instance (12 . 14) when it should be (12 . 13)). I was >> also able to get it to jump three numbers in some cases. >> >>>>>From this point, *any* normal usage will end up correcting the error: >> using "C-c C-k" to kill the editing buffer (instead of "C-x k") or as >> you noted any of the commands that lead to refreshing the unread count. >> But if you don't use any of those commands, you'll see the inflated >> active/unread count when you get back to the *Group* buffer (the "B DEL" >> isn't necessary for the recipe, and in fact at that stage the message >> under point has already been deleted). >> >> That's as far as I've gotten, and I'll keep working on why the article >> number starts off inflated. But in the meantime, the solution is "don't >> do that". > > Sorry, that sounded a bit unfriendly, when I was the one who asked you > to submit the bug report! An hour or two of chasing Gnus function calls > will do that to you... Okay, I found two things, one the proximate cause of this bug, another "probably wrong" adjacent issue. The main problem is that `gnus-draft-setup' both calls `message-mode' (which calls `message-set-auto-save-file-name'), and then directly calls `message-set-auto-save-file-name' itself. Without getting into horrible details, that functions shouldn't be called twice, because it generates an extra numerical file name, which ends up inflating the active value of the drafts group. I've attached a patch that removes the second call. If you feel comfortable applying and testing patches, I hope you'll try it. In my experiments it fixes the problem. The patch also semi-addresses the second issue. When saving a draft, message-mode only buries the buffer, it doesn't delete it. If you go back and start editing the draft, `gnus-draft-check-draft-articles' is supposed to see if a there's already a buffer visiting the draft file, and return you to that buffer instead of creating a new one. But it only does that if the buffer is modified, which it isn't if you've saved/buried the draft. I don't see why that should mean that you need a whole new buffer for editing the message, and the fact that there are now two "copies" of the message buffer causes further problems with the inflating article numbers (why I could sometimes see three or even four "jumps"). The patch removes the check for modification, and in my brief testing behaves the way I would expect it to. That whole part of the code is weird: (let ((buffers (buffer-list)) file buffs buff) (save-current-buffer (while (and articles (not buff)) (setq file (nndraft-article-filename (pop articles)) buffs buffers) (while buffs (set-buffer (setq buff (pop buffs))) (if (and buffer-file-name (equal (file-remote-p file) (file-remote-p buffer-file-name)) (string-equal (file-truename buffer-file-name) (file-truename file)) ; (buffer-modified-p) ) (setq buffs nil) (setq buff nil))))) That seems like a very long way of writing `find-buffer-visiting'. Maybe the remote check should be carried over, but otherwise this seems very replaceable. Anyway, please let me know if you can check the patch. Eric --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=gnus-draft-fixes.diff diff --git a/lisp/gnus/gnus-draft.el b/lisp/gnus/gnus-draft.el index 1fc2b33fffb..406ff705f3d 100644 --- a/lisp/gnus/gnus-draft.el +++ b/lisp/gnus/gnus-draft.el @@ -262,8 +262,7 @@ gnus-draft-setup (setq ga (message-fetch-field gnus-draft-meta-information-header))) (insert mail-header-separator) - (forward-line 1) - (message-set-auto-save-file-name)))) + (forward-line 1)))) (gnus-backlog-remove-article group narticle) (when (and ga (ignore-errors (setq ga (car (read-from-string ga))))) @@ -303,8 +302,7 @@ gnus-draft-check-draft-articles (equal (file-remote-p file) (file-remote-p buffer-file-name)) (string-equal (file-truename buffer-file-name) - (file-truename file)) - (buffer-modified-p)) + (file-truename file))) (setq buffs nil) (setq buff nil))))) (when buff --=-=-=--