GNU bug report logs - #76783
[PATCH] Keep IMAP connection opened with nnml

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Severity: wishlist; Reported by: Manuel Giraud <manuel@HIDDEN>; Keywords: patch; dated Thu, 6 Mar 2025 16:13:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.
Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 76783 <at> debbugs.gnu.org:


Received: (at 76783) by debbugs.gnu.org; 7 Mar 2025 16:40:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Mar 07 11:40:01 2025
Received: from localhost ([127.0.0.1]:49761 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tqajx-0006Lw-9B
	for submit <at> debbugs.gnu.org; Fri, 07 Mar 2025 11:40:01 -0500
Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]:52309)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>)
 id 1tqajv-0006Lj-CY
 for 76783 <at> debbugs.gnu.org; Fri, 07 Mar 2025 11:39:59 -0500
Received: by mail-ej1-x62a.google.com with SMTP id
 a640c23a62f3a-abfe7b5fbe8so274844466b.0
 for <76783 <at> debbugs.gnu.org>; Fri, 07 Mar 2025 08:39:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1741365593; x=1741970393; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=zMFEc55ZhZAz1uMqawtLKqmsmi5/GMiQ5BVJPue6XOM=;
 b=YUnIylo9s7woBh6fzvqrGcL05ho3o9LIF4CYM2nthDpqqgJZlT2NFNF2T09b3vYK1q
 i1SRlQmBH/HhdHZ7ieSe0bcR443z0mevscOOqj8dyeGc0R11asnAsHIA57E11mulWC03
 06XYkf17p7T3hPYD0ESHnXTVOqM+uIVdwJ7kat1XmtPhJa/WRRaOZHQ5Pg/eTU6oMU75
 O60U9rOrfrOLnGjkE69MnNgm16R7oWnUdme0Oo2M3ZLgnbPBd4NIUAhKKpNQAPs2tnak
 4z5OWzFGLApzMOmdU/4jBvFxlSb6ye1AN+FGIwvAi69gdSY6QfSgF/TVt8p0zIsi3gYQ
 SXZw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1741365593; x=1741970393;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=zMFEc55ZhZAz1uMqawtLKqmsmi5/GMiQ5BVJPue6XOM=;
 b=ESlYKkfxnzzCp/O8Fl9/518XL0kjOAeH1AuY3mCx1rBbh4AhtjdAvxMYJ63FQ48gb8
 ADCZ+whQ8Bq/ZFJsYmG+Yn5YJ5eCPaL+uLLUNk1T6eJ9RU74z1uL8NL16j4UBW050MTp
 Ybcn8CIGZIjgavzQ2Yh7HMjqRhibVl6wmxwn3b1EfoiGVfhgwK8DCXQPHjYInV1Y1s+x
 5jytK2HERhJtV7npZdyuIE2g12FPD3spv3JhYyoD1Oyx2Ym+HvWX65eZf7UcqpB6d0nY
 BG8Tca9ySU8pGoa0N8zap9P9KqqaowbTIHWBtEnFith0Cvw8XjN7NNVWnen2UVa8CtP4
 FIwA==
X-Forwarded-Encrypted: i=1;
 AJvYcCW0jPeLA5+ft87fFSclncZCn72FRMIgxKveC7JhqHW+mVtKC+9hIgrAlBTrSjex1qtWpuO8wg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yx7jU6NxGx+FIRF2ikHmwLwH5pdOZ+B/qwNIjSYvFHed+sVpuk7
 /hEX47UsGwOOmUzMLL4tdtposzSqBb7DHz+kj/7iE9YMWECMtVx5UR8WbSJA53vgN4kyyY23TUO
 2MBIbZ4uyLRADo/cx8IPOGxcKFgs=
X-Gm-Gg: ASbGnct4HJxmnM6pLjBq+HxXN1/pcEbhXjdTLMCvCVeRwbNWErB1ZdGW3R0bv4Lefe4
 JJGnAiYPLYGkJHpJYrKbIaMx5nxcEbQWK2KM8z4ze8SLtcf5CZmOgGcPCyoSTgWNt8hg3i7q6o1
 MtIwcZFDxixnXEB0ujamFrV7jIlw==
X-Google-Smtp-Source: AGHT+IFdRASL5jaPbav7U7D2AKZw6t9kq7O/AMVGBdoTD6K3DMkQmu9sIF98C6bhBaGp20Py/MIbyRiJuqSIBdSHB6E=
X-Received: by 2002:a05:6402:2353:b0:5e5:c0e7:f428 with SMTP id
 4fb4d7f45d1cf-5e5e210296emr10163802a12.0.1741365592961; Fri, 07 Mar 2025
 08:39:52 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Fri, 7 Mar 2025 16:39:51 +0000
From: Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <87plitmaz2.fsf@HIDDEN>
References: <87a59y3zr6.fsf@HIDDEN> <87plitmaz2.fsf@HIDDEN>
MIME-Version: 1.0
Date: Fri, 7 Mar 2025 16:39:51 +0000
X-Gm-Features: AQ5f1JoUl7EIrMYJBPSJpQR-fL6lAWY7LZKGk16zBUNEGbxGRCRDpF_3326WvP8
Message-ID: <CADwFkm=KQ=+oniOErb0RcTBYAqEpsv=DRwAAZoYon0dkdC201g@HIDDEN>
Subject: Re: bug#76783: [PATCH] Keep IMAP connection opened with nnml
To: Manuel Giraud <manuel@HIDDEN>, 76783 <at> debbugs.gnu.org
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 76783
Cc: Andrew Cohen <acohen@HIDDEN>, Eric Abrahamsen <eric@HIDDEN>,
 Lars Magne Ingebrigtsen <larsi@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Manuel Giraud <manuel@HIDDEN> writes:

> From 426b31e1fc6b5a098445779084424c07bbc8282d Mon Sep 17 00:00:00 2001
> From: Manuel Giraud <manuel@HIDDEN>
> Date: Thu, 6 Mar 2025 15:40:48 +0100
> Subject: [PATCH] Keep IMAP connection opened with nnml
>
> * lisp/gnus/mail-source.el (mail-source-fetch-imap): Keep
> connection opened when user provide a buffer name.
> * lisp/gnus/nnml.el (nnml-connected-buffer-list): New variable
> of connected buffers.
> (nnml-request-close): New function that closes connected buffers
> when quitting Gnus.
> * doc/misc/gnus.texi (Mail Source Specifiers): Document the
> feature.

Andrew, Eric, could you please take a look at this patch?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#76783; Package emacs. Full text available.

Message received at 76783 <at> debbugs.gnu.org:


Received: (at 76783) by debbugs.gnu.org; 7 Mar 2025 09:44:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Mar 07 04:44:29 2025
Received: from localhost ([127.0.0.1]:47037 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tqUFp-0002bs-1o
	for submit <at> debbugs.gnu.org; Fri, 07 Mar 2025 04:44:29 -0500
Received: from ledu-giraud.fr ([51.159.28.247]:2660)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <manuel@HIDDEN>)
 id 1tqUFm-0002bi-CY
 for 76783 <at> debbugs.gnu.org; Fri, 07 Mar 2025 04:44:27 -0500
DKIM-Signature: v=1; a=ed25519-sha256; c=simple/simple; s=ed25519; bh=WA/7YTxL
 Zfpw1FirEB9Y9oKva45z5LqjyoTJ3YWjMf4=;
 h=date:references:in-reply-to:
 subject:cc:to:from; d=ledu-giraud.fr; b=qnZxxNz4yFyup71Tnya2tq2yQHpJ9b
 WxfUa/RYeTCBUlt1q18+wTFCr+6WifTIR+L5x+VgxtONPslLfSN6ZMDQ==
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=rsa; bh=WA/7YTxLZfpw1Fir
 EB9Y9oKva45z5LqjyoTJ3YWjMf4=;
 h=date:references:in-reply-to:subject:
 cc:to:from; d=ledu-giraud.fr; b=C2zsPlQLyL+w6rNj0XnB8wi9SCZH/iAvoAQexF
 kLxWPk0oFgDNLtNAEd/jYFSgKmIUPlbDLB8hRHUDEuFk4nUHhmmKKBaWqdGftX8A5kqi1s
 Unntt+gQi8xq4muV3ApiU6JJ8MCSdr2yFmEJhKOH+MwMsJxaIk5FuNmfp3tTQCCfLvUH5M
 GEFsmJxKx5eb+GEiOgJmFMQLMaBmY4JOt89IqHuVTgR1Mf6f+p6gFqqqejFgdHq4tr9stP
 WFkrTFKoQlgB+6M9V9UgULprl/POBB2gjb/c1j9zgC0lxBkZtemouM5TaKJppIURcuTuCp
 rpun9ZVrB+I/Vm403HqShn0Q==
Received: from computer (2630.fr [82.65.148.221])
 by ledu-giraud.fr (OpenSMTPD) with ESMTPSA id b466fd96
 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); 
 Fri, 7 Mar 2025 10:44:19 +0100 (CET)
From: Manuel Giraud <manuel@HIDDEN>
To: 76783 <at> debbugs.gnu.org
Subject: Re: bug#76783: [PATCH] Keep IMAP connection opened with nnml
In-Reply-To: <87a59y3zr6.fsf@HIDDEN>
References: <87a59y3zr6.fsf@HIDDEN>
Date: Fri, 07 Mar 2025 10:44:17 +0100
Message-ID: <87plitmaz2.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 76783
Cc: Lars Magne Ingebrigtsen <larsi@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain

Hi,

Please consider this new version instead in which I simplified
`nnml-request-close' a bit.

--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=0001-Keep-IMAP-connection-opened-with-nnml.patch

From 426b31e1fc6b5a098445779084424c07bbc8282d Mon Sep 17 00:00:00 2001
From: Manuel Giraud <manuel@HIDDEN>
Date: Thu, 6 Mar 2025 15:40:48 +0100
Subject: [PATCH] Keep IMAP connection opened with nnml

* lisp/gnus/mail-source.el (mail-source-fetch-imap): Keep
connection opened when user provide a buffer name.
* lisp/gnus/nnml.el (nnml-connected-buffer-list): New variable
of connected buffers.
(nnml-request-close): New function that closes connected buffers
when quitting Gnus.
* doc/misc/gnus.texi (Mail Source Specifiers): Document the
feature.
---
 doc/misc/gnus.texi       |  8 ++++++++
 lisp/gnus/mail-source.el | 28 ++++++++++++++++++++--------
 lisp/gnus/nnml.el        | 14 ++++++++++++++
 3 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index a239a8a628b..9a003d0c3a6 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -15408,6 +15408,14 @@ Mail Source Specifiers
 If non-@code{nil}, don't remove all articles marked as deleted in the
 mailbox after finishing the fetch.
 
+@item :buffer
+The name of the buffer used to communicate with the @acronym{IMAP}
+server.  By default, Gnus creates such a buffer on the fly and kills it
+after having retrieved some mails.  By setting this option, the
+connection with the server is kept open for the entire Gnus session.
+Preferably, you would use a buffer name starting with the space
+character to avoid it being list in @code{list-buffers} for instance.
+
 @end table
 
 An example @acronym{IMAP} mail source:
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 954dce92e84..f4685af0f72 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -349,6 +349,7 @@ mail-source-new-mail-available
        (:mailbox "INBOX")
        (:predicate "UNSEEN UNDELETED")
        (:fetchflag "\\Deleted")
+       (:buffer)
        (:prescript)
        (:prescript-delay)
        (:postscript)
@@ -1034,6 +1035,7 @@ mail-source-fetch-maildir
       found)))
 
 (autoload 'imap-open "imap")
+(autoload 'imap-opened "imap")
 (autoload 'imap-authenticate "imap")
 (autoload 'imap-mailbox-select "imap")
 (autoload 'imap-mailbox-unselect "imap")
@@ -1046,6 +1048,7 @@ mail-source-fetch-maildir
 (autoload 'imap-list-to-message-set "imap")
 (autoload 'imap-range-to-message-set "imap")
 (autoload 'nnheader-ms-strip-cr "nnheader")
+(autoload 'nnml-connected-buffer-list "nnml")
 
 (defvar mail-source-imap-file-coding-system 'binary
   "Coding system for the crashbox made by `mail-source-fetch-imap'.")
@@ -1063,14 +1066,21 @@ mail-source-fetch-imap
      prescript-delay)
     (let ((from (format "%s:%s:%s" server user port))
 	  (found 0)
-	  (buf (generate-new-buffer " *imap source*"))
+	  (buf (if buffer
+                   (get-buffer-create buffer)
+                 (generate-new-buffer " *imap source*")))
 	  (imap-shell-program (or (list program) imap-shell-program)))
-      (if (and (imap-open server port stream authentication buf)
-	       (imap-authenticate
-		user (or (cdr (assoc from mail-source-password-cache))
-                         password)
-                buf))
+      (if (or (and buffer (imap-opened buf))
+              (and (imap-open server port stream authentication buf)
+	           (imap-authenticate
+		    user (or (cdr (assoc from mail-source-password-cache))
+                             password)
+                    buf)))
           (let ((mailbox-list (if (listp mailbox) mailbox (list mailbox))))
+            ;; Remember communication buffer if needed.
+            (when (and buffer
+                       (not (member buf nnml-connected-buffer-list)))
+              (push buf nnml-connected-buffer-list))
             (dolist (mailbox mailbox-list)
               (when (imap-mailbox-select mailbox nil buf)
 	        (let ((coding-system-for-write
@@ -1114,7 +1124,9 @@ mail-source-fetch-imap
 	    (if dontexpunge
 		(imap-mailbox-unselect buf)
               (imap-mailbox-close nil buf)))))
-            (imap-close buf))
+            ;; If the user has provided a buffer name keep the
+            ;; connection opened.
+            (unless buffer (imap-close buf)))
 	(imap-close buf)
 	;; We nix out the password in case the error
 	;; was because of a wrong password being given.
@@ -1122,7 +1134,7 @@ mail-source-fetch-imap
 	      (delq (assoc from mail-source-password-cache)
 		    mail-source-password-cache))
 	(error "IMAP error: %s" (imap-error-text buf)))
-      (kill-buffer buf)
+      (unless buffer (kill-buffer buf))
       (mail-source-run-script
        postscript
        `((?p . ,password) (?t . ,mail-source-crash-box)
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index 4366391a66d..6db5031d181 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -541,6 +541,20 @@ nnml-set-status
 	(nnmail-replace-status name value))
       t))))
 
+;;;###autoload
+(defvar nnml-connected-buffer-list nil)
+
+(deffoo nnml-request-close ()
+  (let (buf)
+    (while (setq buf (pop nnml-connected-buffer-list))
+      (when (buffer-live-p buf)
+        (imap-close buf)
+        ;; On the safe side: kill any leftover process.
+        (let ((proc (get-buffer-process buf)))
+          (when proc
+            (delete-process proc)))
+        (kill-buffer buf)))))
+
 
 ;;; Internal functions.
 
-- 
2.48.1


--=-=-=
Content-Type: text/plain

-- 
Manuel Giraud

--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#76783; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 6 Mar 2025 16:12:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 06 11:12:10 2025
Received: from localhost ([127.0.0.1]:44903 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tqDpS-0003Sm-1p
	for submit <at> debbugs.gnu.org; Thu, 06 Mar 2025 11:12:10 -0500
Received: from lists.gnu.org ([2001:470:142::17]:38980)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <manuel@HIDDEN>)
 id 1tqDpO-0003Qf-JH
 for submit <at> debbugs.gnu.org; Thu, 06 Mar 2025 11:12:07 -0500
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 <manuel@HIDDEN>)
 id 1tqDp5-00071u-Jb
 for bug-gnu-emacs@HIDDEN; Thu, 06 Mar 2025 11:11:47 -0500
Received: from ledu-giraud.fr ([51.159.28.247])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <manuel@HIDDEN>)
 id 1tqDp3-00018S-BS
 for bug-gnu-emacs@HIDDEN; Thu, 06 Mar 2025 11:11:47 -0500
DKIM-Signature: v=1; a=ed25519-sha256; c=simple/simple; s=ed25519; bh=f8/BDhTI
 2SQpem0TNR5VVVaxpZF8FonyAwtaxNLSJ98=; h=date:subject:to:from; 
 d=ledu-giraud.fr;
 b=WeNESyWAC7dK9lAXpH/CowbZV/EQVJ2VefWj0Qxu4SdoNSD+H0
 zASm+r2AVAVAYvYnJ6/aQhWRW/Y+HIBYkiDw==
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=rsa; bh=f8/BDhTI2SQpem0T
 NR5VVVaxpZF8FonyAwtaxNLSJ98=; h=date:subject:to:from;
 d=ledu-giraud.fr; b=fxZtZMFTV9RM0p9fc/L52wX4Bd4Ix1KLQpmj7q8cBNZ4O3QKzK
 9jaHjqAZ/j/D6jAlAPXSzwEAGzwSiWgYpKlaGBGhEM6M/jsDhJlkTuSxKdZB+cZiopijlY
 BHY7zwHF9+R5Y34UQoE9lag4+Sq2dXNtDx3ECyveAYBEupvKGphKPksOt8gH18ursExfsP
 GrULM06nKJXn9eNrT/gV1R32iqWn/r/H+2YTDAl1V8VD1+96XRwDPjgqlCJYXydH6PVNL6
 WKzZ4yfXXfyScTcCo4ubGm0GPCUu2SbtFCyhz/aWFhlNllXs5o+L0+5IXjkEVAnjDrb06J
 Oz8iYsI4lNIw==
Received: from computer (<unknown> [10.1.1.1])
 by ledu-giraud.fr (OpenSMTPD) with ESMTPSA id d4e51acc
 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for <bug-gnu-emacs@HIDDEN>;
 Thu, 6 Mar 2025 17:11:42 +0100 (CET)
From: Manuel Giraud <manuel@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: [PATCH] Keep IMAP connection opened with nnml
X-Debbugs-Cc: Lars Magne Ingebrigtsen <larsi@HIDDEN>
Date: Thu, 06 Mar 2025 17:11:41 +0100
Message-ID: <87a59y3zr6.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=51.159.28.247; envelope-from=manuel@HIDDEN;
 helo=ledu-giraud.fr
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

--=-=-=
Content-Type: text/plain

Tags: patch

Hi,

Here is a patch that permits a Gnus/nnml user to define the name of the
buffer for IMAP communication.  Like this, for instance:

(setq mail-sources '((imap :server "example.com"
                           :stream tls
			   :buffer " *imap example.com*")))
                           
Doing so, said buffer will be kept connected for the entire Gnus
session.  FWIW, I'm using it right now and it seems like a quite
effective way to speed up mail retrieving (even better with multiple
IMAP servers).

I have no use for this myself but I guess that this feature could also
be extended to POP servers.

In GNU Emacs 31.0.50 (build 22, x86_64-unknown-openbsd7.6, X toolkit) of
 2025-03-06 built on computer
Repository revision: fe7a8c92be6269f8fc7933eb6c190178839d0f8a
Repository branch: mgi/mail-source-keep-connect
Windowing system distributor 'The X.Org Foundation', version 11.0.12101015
System Description: OpenBSD computer 7.6 GENERIC.MP#567 amd64

Configured using:
 'configure CC=egcc CPPFLAGS=-I/usr/local/include
 LDFLAGS=-L/usr/local/lib MAKEINFO=gmakeinfo --prefix=/home/manuel/emacs
 --bindir=/home/manuel/bin --with-x-toolkit=lucid
 --with-toolkit-scroll-bars=no --without-cairo
 --without-compress-install'


--=-=-=
Content-Type: text/patch
Content-Disposition: attachment;
 filename=0001-Keep-IMAP-connection-opened-with-nnml.patch

From 75f85630179d09ccc058c6771415c6bff59f618c Mon Sep 17 00:00:00 2001
From: Manuel Giraud <manuel@HIDDEN>
Date: Thu, 6 Mar 2025 15:40:48 +0100
Subject: [PATCH] Keep IMAP connection opened with nnml

* lisp/gnus/mail-source.el (mail-source-fetch-imap): Keep
connection opened when user provide a buffer name.
* lisp/gnus/nnml.el (nnml-connected-buffer-list): New variable
of connected buffers.
(nnml-request-close): New function that closes connected buffers
when quitting Gnus.
* doc/misc/gnus.texi (Mail Source Specifiers): Document the
feature.
---
 doc/misc/gnus.texi       |  8 ++++++++
 lisp/gnus/mail-source.el | 28 ++++++++++++++++++++--------
 lisp/gnus/nnml.el        | 12 ++++++++++++
 3 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index a239a8a628b..9a003d0c3a6 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -15408,6 +15408,14 @@ Mail Source Specifiers
 If non-@code{nil}, don't remove all articles marked as deleted in the
 mailbox after finishing the fetch.
 
+@item :buffer
+The name of the buffer used to communicate with the @acronym{IMAP}
+server.  By default, Gnus creates such a buffer on the fly and kills it
+after having retrieved some mails.  By setting this option, the
+connection with the server is kept open for the entire Gnus session.
+Preferably, you would use a buffer name starting with the space
+character to avoid it being list in @code{list-buffers} for instance.
+
 @end table
 
 An example @acronym{IMAP} mail source:
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 954dce92e84..f4685af0f72 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -349,6 +349,7 @@ mail-source-new-mail-available
        (:mailbox "INBOX")
        (:predicate "UNSEEN UNDELETED")
        (:fetchflag "\\Deleted")
+       (:buffer)
        (:prescript)
        (:prescript-delay)
        (:postscript)
@@ -1034,6 +1035,7 @@ mail-source-fetch-maildir
       found)))
 
 (autoload 'imap-open "imap")
+(autoload 'imap-opened "imap")
 (autoload 'imap-authenticate "imap")
 (autoload 'imap-mailbox-select "imap")
 (autoload 'imap-mailbox-unselect "imap")
@@ -1046,6 +1048,7 @@ mail-source-fetch-maildir
 (autoload 'imap-list-to-message-set "imap")
 (autoload 'imap-range-to-message-set "imap")
 (autoload 'nnheader-ms-strip-cr "nnheader")
+(autoload 'nnml-connected-buffer-list "nnml")
 
 (defvar mail-source-imap-file-coding-system 'binary
   "Coding system for the crashbox made by `mail-source-fetch-imap'.")
@@ -1063,14 +1066,21 @@ mail-source-fetch-imap
      prescript-delay)
     (let ((from (format "%s:%s:%s" server user port))
 	  (found 0)
-	  (buf (generate-new-buffer " *imap source*"))
+	  (buf (if buffer
+                   (get-buffer-create buffer)
+                 (generate-new-buffer " *imap source*")))
 	  (imap-shell-program (or (list program) imap-shell-program)))
-      (if (and (imap-open server port stream authentication buf)
-	       (imap-authenticate
-		user (or (cdr (assoc from mail-source-password-cache))
-                         password)
-                buf))
+      (if (or (and buffer (imap-opened buf))
+              (and (imap-open server port stream authentication buf)
+	           (imap-authenticate
+		    user (or (cdr (assoc from mail-source-password-cache))
+                             password)
+                    buf)))
           (let ((mailbox-list (if (listp mailbox) mailbox (list mailbox))))
+            ;; Remember communication buffer if needed.
+            (when (and buffer
+                       (not (member buf nnml-connected-buffer-list)))
+              (push buf nnml-connected-buffer-list))
             (dolist (mailbox mailbox-list)
               (when (imap-mailbox-select mailbox nil buf)
 	        (let ((coding-system-for-write
@@ -1114,7 +1124,9 @@ mail-source-fetch-imap
 	    (if dontexpunge
 		(imap-mailbox-unselect buf)
               (imap-mailbox-close nil buf)))))
-            (imap-close buf))
+            ;; If the user has provided a buffer name keep the
+            ;; connection opened.
+            (unless buffer (imap-close buf)))
 	(imap-close buf)
 	;; We nix out the password in case the error
 	;; was because of a wrong password being given.
@@ -1122,7 +1134,7 @@ mail-source-fetch-imap
 	      (delq (assoc from mail-source-password-cache)
 		    mail-source-password-cache))
 	(error "IMAP error: %s" (imap-error-text buf)))
-      (kill-buffer buf)
+      (unless buffer (kill-buffer buf))
       (mail-source-run-script
        postscript
        `((?p . ,password) (?t . ,mail-source-crash-box)
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index 4366391a66d..0e4546cd7bb 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -541,6 +541,18 @@ nnml-set-status
 	(nnmail-replace-status name value))
       t))))
 
+;;;###autoload
+(defvar nnml-connected-buffer-list nil)
+
+(deffoo nnml-request-close ()
+  (let (buf)
+    (while (setq buf (pop nnml-connected-buffer-list))
+      (when (buffer-live-p buf)
+        (with-current-buffer buf
+	  (when (imap-opened)
+	    (imap-close)))
+        (kill-buffer buf)))))
+
 
 ;;; Internal functions.
 
-- 
2.48.1


--=-=-=
Content-Type: text/plain


-- 
Manuel Giraud

--=-=-=--




Acknowledgement sent to Manuel Giraud <manuel@HIDDEN>:
New bug report received and forwarded. Copy sent to larsi@HIDDEN, bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to larsi@HIDDEN, bug-gnu-emacs@HIDDEN:
bug#76783; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Mon, 10 Mar 2025 21:15:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.