* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
@ 2020-08-21 20:43 Eric Abrahamsen
2020-08-22 6:33 ` Eli Zaretskii
2020-08-22 13:53 ` Lars Ingebrigtsen
0 siblings, 2 replies; 12+ messages in thread
From: Eric Abrahamsen @ 2020-08-21 20:43 UTC (permalink / raw)
To: 42977
[-- Attachment #1: Type: text/plain, Size: 670 bytes --]
The attached patch provides a new gnus-dbus.el library, allowing systems
with dbus support to register a signal that closes all Gnus servers when
the system is going down for sleep. This is kind of a stop-gap solution
for the larger problems discussed in #40748.
It only does anything if Emacs has been compiled with dbus support, and
if the user sets the `gnus-dbus-close-on-sleep' to non-nil (it defaults
to nil).
Right now I've done this by checking the value of that option in
`gnus-1', but I could just as easily have the library add a startup
hook.
I assume this would require a mention in the manual. Is it something
we'd add to NEWS, as well?
Thanks,
Eric
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-basic-D-Bus-integration-to-Gnus.patch --]
[-- Type: text/x-patch, Size: 4296 bytes --]
From 414051f4fb7d60a6674b7267dc7f73025ddb1a3b Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <eric@ericabrahamsen.net>
Date: Fri, 21 Aug 2020 13:36:58 -0700
Subject: [PATCH] Add basic D-Bus integration to Gnus
* lisp/gnus/gnus-dbus.el: New library, registering a signal that
closes all Gnus servers when the system is going to sleep.
* lisp/gnus/gnus-start.el: Check new option
`gnus-dbus-close-on-sleep', and register the appropriate D-Bus signal
if it is non-nil.
* lisp/gnus/gnus.el: New gnus-dbus customization group.
---
lisp/gnus/gnus-dbus.el | 66 +++++++++++++++++++++++++++++++++++++++++
lisp/gnus/gnus-start.el | 3 ++
lisp/gnus/gnus.el | 4 +++
3 files changed, 73 insertions(+)
create mode 100644 lisp/gnus/gnus-dbus.el
diff --git a/lisp/gnus/gnus-dbus.el b/lisp/gnus/gnus-dbus.el
new file mode 100644
index 0000000000..14f0abb6be
--- /dev/null
+++ b/lisp/gnus/gnus-dbus.el
@@ -0,0 +1,66 @@
+;;; gnus-dbus.el --- DBUS integration for Gnus -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library contains some Gnus integration for systems using DBUS.
+;; At present it registers a signal to close all Gnus servers before
+;; system sleep or hibernation.
+
+;;; Code:
+
+(require 'dbus)
+
+(defcustom gnus-dbus-close-on-sleep nil
+ "When non-nil, close Gnus servers on system sleep."
+ :group 'gnus-dbus
+ :type 'boolean)
+
+(defvar gnus-dbus-sleep-registration-object nil
+ "Object returned from `dbus-register-signal'.
+Used to unregistering the signal.")
+
+(defun gnus-dbus-register-sleep-signal ()
+ "Use `dbus-register-signal' to close servers on sleep."
+ (when (featurep 'dbusbind)
+ (setq gnus-dbus-sleep-registration-object
+ (dbus-register-signal :system
+ "org.freedesktop.login1"
+ "/org/freedesktop/login1"
+ "org.freedesktop.login1.Manager"
+ "PrepareForSleep"
+ #'gnus-dbus-sleep-handler))
+ (gnus-add-shutdown #'gnus-dbus-unregister-sleep-signal 'gnus)))
+
+(defun gnus-dbus-sleep-handler (sleep-start)
+ ;; Sleep-start is t before sleeping.
+ (when (and sleep-start
+ (gnus-alive-p))
+ (condition-case nil
+ (gnus-close-all-servers)
+ (error nil))))
+
+(defun gnus-dbus-unregister-sleep-signal ()
+ (condition-case nil
+ (dbus-unregister-object
+ gnus-dbus-sleep-registration-object)
+ (wrong-type-argument nil)))
+
+(provide 'gnus-dbus)
+;;; gnus-dbus.el ends here
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index ba8b91be5c..fe600f107c 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -31,6 +31,7 @@
(require 'gnus-range)
(require 'gnus-util)
(require 'gnus-cloud)
+(require 'gnus-dbus)
(autoload 'message-make-date "message")
(autoload 'gnus-agent-read-servers-validate "gnus-agent")
(autoload 'gnus-agent-save-local "gnus-agent")
@@ -798,6 +799,8 @@ gnus-1
(gnus-run-hooks 'gnus-setup-news-hook)
(when gnus-agent
(gnus-request-create-group "queue" '(nndraft "")))
+ (when gnus-dbus-close-on-sleep
+ (gnus-dbus-register-sleep-signal))
(gnus-start-draft-setup)
;; Generate the group buffer.
(gnus-group-list-groups level)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index cecf4d4fb4..f615d49d27 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -292,6 +292,10 @@ gnus-fun
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
+(defgroup gnus-dbus nil
+ "D-Bus integration for Gnus."
+ :group 'gnus)
+
(defconst gnus-version-number "5.13"
"Version number for this version of Gnus.")
--
2.28.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-21 20:43 bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration Eric Abrahamsen
@ 2020-08-22 6:33 ` Eli Zaretskii
2020-08-22 13:53 ` Lars Ingebrigtsen
1 sibling, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2020-08-22 6:33 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: 42977
> From: Eric Abrahamsen <eric@ericabrahamsen.net>
> Date: Fri, 21 Aug 2020 13:43:07 -0700
>
> I assume this would require a mention in the manual. Is it something
> we'd add to NEWS, as well?
Yes, IMO.
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-21 20:43 bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration Eric Abrahamsen
2020-08-22 6:33 ` Eli Zaretskii
@ 2020-08-22 13:53 ` Lars Ingebrigtsen
2020-08-22 18:00 ` Eric Abrahamsen
1 sibling, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-22 13:53 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: 42977
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> The attached patch provides a new gnus-dbus.el library, allowing systems
> with dbus support to register a signal that closes all Gnus servers when
> the system is going down for sleep.
Great! I've just skimmed the patch, but it looks good to me.
> I assume this would require a mention in the manual. Is it something
> we'd add to NEWS, as well?
Yup and yup.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-22 13:53 ` Lars Ingebrigtsen
@ 2020-08-22 18:00 ` Eric Abrahamsen
2020-08-23 12:27 ` Lars Ingebrigtsen
0 siblings, 1 reply; 12+ messages in thread
From: Eric Abrahamsen @ 2020-08-22 18:00 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 42977
[-- Attachment #1: Type: text/plain, Size: 720 bytes --]
On 08/22/20 15:53 PM, Lars Ingebrigtsen wrote:
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> The attached patch provides a new gnus-dbus.el library, allowing systems
>> with dbus support to register a signal that closes all Gnus servers when
>> the system is going down for sleep.
>
> Great! I've just skimmed the patch, but it looks good to me.
>
>> I assume this would require a mention in the manual. Is it something
>> we'd add to NEWS, as well?
>
> Yup and yup.
Okay, good. Here's a new version of the patch, with docs. I also
switched the signal type from :system to :session, since :session is
apparently appropriate for user-level stuff. Anyway, I'll run this for a
few days before pushing.
Eric
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-basic-D-Bus-integration-to-Gnus.patch --]
[-- Type: text/x-patch, Size: 7011 bytes --]
From 702961d4e8a1654cec7c3af26855899f65d62f10 Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <eric@ericabrahamsen.net>
Date: Fri, 21 Aug 2020 13:36:58 -0700
Subject: [PATCH 1/2] Add basic D-Bus integration to Gnus
* lisp/gnus/gnus-dbus.el: New library, registering a signal that
closes all Gnus servers when the system is going to sleep.
* lisp/gnus/gnus-start.el: Check new option
`gnus-dbus-close-on-sleep', and register the appropriate D-Bus signal
if it is non-nil.
* lisp/gnus/gnus.el: New gnus-dbus customization group.
* doc/misc/gnus.texi: Document.
---
doc/misc/gnus.texi | 22 +++++++++++++
etc/NEWS | 5 +++
lisp/gnus/gnus-dbus.el | 68 +++++++++++++++++++++++++++++++++++++++++
lisp/gnus/gnus-start.el | 3 ++
lisp/gnus/gnus.el | 4 +++
5 files changed, 102 insertions(+)
create mode 100644 lisp/gnus/gnus-dbus.el
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 332926a685..0bdc2fa297 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -828,6 +828,7 @@ Top
* Spam Package:: A package for filtering and processing spam.
* The Gnus Registry:: A package for tracking messages by Message-ID.
* The Gnus Cloud:: A package for synchronizing Gnus marks.
+* D-Bus Integration:: Closing Gnus servers on system sleep.
* Other modes:: Interaction with other modes.
* Various Various:: Things that are really various.
@@ -22333,6 +22334,7 @@ Various
* Spam Package:: A package for filtering and processing spam.
* The Gnus Registry:: A package for tracking messages by Message-ID.
* The Gnus Cloud:: A package for synchronizing Gnus marks.
+* D-Bus Integration:: Closing Gnus servers on system sleep.
* Other modes:: Interaction with other modes.
* Various Various:: Things that are really various.
@end menu
@@ -26404,6 +26406,26 @@ Gnus Cloud Usage
Server buffer (@pxref{Gnus Cloud Setup}).
@end defvar
+@node D-Bus Integration
+@section D-Bus Integration
+@cindex dbus
+@cindex D-Bus
+@cindex gnus-dbus
+@cindex system sleep
+@cindex closing servers automatically
+@cindex hung connections
+
+When using laptops or other systems that have a sleep or hibernate
+functionality, it's possible for long-running server connections to
+become ``hung'', requiring the user to manually close and re-open the
+connections after the system resumes. On systems compiled with D-Bus
+support (check the value of @code{(featurep 'dbusbind)}), Gnus can
+register a D-Bus signal to automatically close all server connections
+before the system goes to sleep. To enable this, set
+@code{gnus-dbus-close-on-sleep} to a non-nil value.
+
+For more information about D-Bus and Emacs, @pxref{Top,,, dbus, D-Bus integration in Emacs}.
+
@node Other modes
@section Interaction with other modes
diff --git a/etc/NEWS b/etc/NEWS
index 0a6a7dec5c..5e7ad0073c 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -267,6 +267,11 @@ tags to be considered as well.
** Gnus
++++
+*** New option 'gnus-dbus-close-on-sleep'
+On systems with D-Bus support, it is now possible to register a signal
+to close all Gnus servers before the system sleeps.
+
+++
*** The key binding of 'gnus-summary-search-article-forward' has changed.
This command was previously on 'M-s' and shadowed the global 'M-s'
diff --git a/lisp/gnus/gnus-dbus.el b/lisp/gnus/gnus-dbus.el
new file mode 100644
index 0000000000..b6e8bb9c8b
--- /dev/null
+++ b/lisp/gnus/gnus-dbus.el
@@ -0,0 +1,68 @@
+;;; gnus-dbus.el --- DBUS integration for Gnus -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library contains some Gnus integration for systems using DBUS.
+;; At present it registers a signal to close all Gnus servers before
+;; system sleep or hibernation.
+
+;;; Code:
+
+(require 'gnus)
+(require 'dbus)
+(declare-function gnus-close-all-servers "gnus-start")
+
+(defcustom gnus-dbus-close-on-sleep nil
+ "When non-nil, close Gnus servers on system sleep."
+ :group 'gnus-dbus
+ :type 'boolean)
+
+(defvar gnus-dbus-sleep-registration-object nil
+ "Object returned from `dbus-register-signal'.
+Used to unregister the signal.")
+
+(defun gnus-dbus-register-sleep-signal ()
+ "Use `dbus-register-signal' to close servers on sleep."
+ (when (featurep 'dbusbind)
+ (setq gnus-dbus-sleep-registration-object
+ (dbus-register-signal :session
+ "org.freedesktop.login1"
+ "/org/freedesktop/login1"
+ "org.freedesktop.login1.Manager"
+ "PrepareForSleep"
+ #'gnus-dbus-sleep-handler))
+ (gnus-add-shutdown #'gnus-dbus-unregister-sleep-signal 'gnus)))
+
+(defun gnus-dbus-sleep-handler (sleep-start)
+ ;; Sleep-start is t before sleeping.
+ (when (and sleep-start
+ (gnus-alive-p))
+ (condition-case nil
+ (gnus-close-all-servers)
+ (error nil))))
+
+(defun gnus-dbus-unregister-sleep-signal ()
+ (condition-case nil
+ (dbus-unregister-object
+ gnus-dbus-sleep-registration-object)
+ (wrong-type-argument nil)))
+
+(provide 'gnus-dbus)
+;;; gnus-dbus.el ends here
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index ba8b91be5c..fe600f107c 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -31,6 +31,7 @@
(require 'gnus-range)
(require 'gnus-util)
(require 'gnus-cloud)
+(require 'gnus-dbus)
(autoload 'message-make-date "message")
(autoload 'gnus-agent-read-servers-validate "gnus-agent")
(autoload 'gnus-agent-save-local "gnus-agent")
@@ -798,6 +799,8 @@ gnus-1
(gnus-run-hooks 'gnus-setup-news-hook)
(when gnus-agent
(gnus-request-create-group "queue" '(nndraft "")))
+ (when gnus-dbus-close-on-sleep
+ (gnus-dbus-register-sleep-signal))
(gnus-start-draft-setup)
;; Generate the group buffer.
(gnus-group-list-groups level)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index cecf4d4fb4..f615d49d27 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -292,6 +292,10 @@ gnus-fun
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
+(defgroup gnus-dbus nil
+ "D-Bus integration for Gnus."
+ :group 'gnus)
+
(defconst gnus-version-number "5.13"
"Version number for this version of Gnus.")
--
2.28.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-22 18:00 ` Eric Abrahamsen
@ 2020-08-23 12:27 ` Lars Ingebrigtsen
2020-08-25 17:43 ` Eric Abrahamsen
0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-23 12:27 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: 42977
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> Okay, good. Here's a new version of the patch, with docs. I also
> switched the signal type from :system to :session, since :session is
> apparently appropriate for user-level stuff. Anyway, I'll run this for a
> few days before pushing.
Sounds good. :-)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-23 12:27 ` Lars Ingebrigtsen
@ 2020-08-25 17:43 ` Eric Abrahamsen
2020-08-25 19:21 ` Lars Ingebrigtsen
0 siblings, 1 reply; 12+ messages in thread
From: Eric Abrahamsen @ 2020-08-25 17:43 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 42977
On 08/23/20 14:27 PM, Lars Ingebrigtsen wrote:
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Okay, good. Here's a new version of the patch, with docs. I also
>> switched the signal type from :system to :session, since :session is
>> apparently appropriate for user-level stuff. Anyway, I'll run this for a
>> few days before pushing.
>
> Sounds good. :-)
Okay, there it goes. This was made a tiny bit more difficult to test by
the fact that the 'closed status (in `gnus-opened-servers') is set at
various calling sites, and not centrally in `gnus-close-server'.
`gnus-open-server' sets the 'open status, it seems like
`gnus-close-server' should do the equivalent. I could take it out of
`gnus-group-suspend', and look at whether `gnus-server-set-status' was
really necessary.
WDYT?
Eric
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-25 17:43 ` Eric Abrahamsen
@ 2020-08-25 19:21 ` Lars Ingebrigtsen
2020-08-25 19:33 ` Eric Abrahamsen
0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-25 19:21 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: 42977
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> Okay, there it goes. This was made a tiny bit more difficult to test by
> the fact that the 'closed status (in `gnus-opened-servers') is set at
> various calling sites, and not centrally in `gnus-close-server'.
> `gnus-open-server' sets the 'open status, it seems like
> `gnus-close-server' should do the equivalent. I could take it out of
> `gnus-group-suspend', and look at whether `gnus-server-set-status' was
> really necessary.
I think the use case is stuff like this:
(defun gnus-agent-toggle-group-plugged (group)
"Toggle the status of the server of the current group."
(interactive (list (gnus-group-group-name)))
(let* ((method (gnus-find-method-for-group group))
(status (cadr (assoc method gnus-opened-servers))))
(if (eq status 'offline)
(gnus-server-set-status method 'closed)
(gnus-close-server method)
(gnus-server-set-status method 'offline))
Where we close the server (i.e., the backends close the network
connections), but don't set the status to 'closed, because it's still
open on the Gnus side.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-25 19:21 ` Lars Ingebrigtsen
@ 2020-08-25 19:33 ` Eric Abrahamsen
2020-08-25 19:37 ` Lars Ingebrigtsen
0 siblings, 1 reply; 12+ messages in thread
From: Eric Abrahamsen @ 2020-08-25 19:33 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 42977
On 08/25/20 21:21 PM, Lars Ingebrigtsen wrote:
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Okay, there it goes. This was made a tiny bit more difficult to test by
>> the fact that the 'closed status (in `gnus-opened-servers') is set at
>> various calling sites, and not centrally in `gnus-close-server'.
>> `gnus-open-server' sets the 'open status, it seems like
>> `gnus-close-server' should do the equivalent. I could take it out of
>> `gnus-group-suspend', and look at whether `gnus-server-set-status' was
>> really necessary.
>
> I think the use case is stuff like this:
>
> (defun gnus-agent-toggle-group-plugged (group)
> "Toggle the status of the server of the current group."
> (interactive (list (gnus-group-group-name)))
> (let* ((method (gnus-find-method-for-group group))
> (status (cadr (assoc method gnus-opened-servers))))
> (if (eq status 'offline)
> (gnus-server-set-status method 'closed)
> (gnus-close-server method)
> (gnus-server-set-status method 'offline))
>
> Where we close the server (i.e., the backends close the network
> connections), but don't set the status to 'closed, because it's still
> open on the Gnus side.
Okay, I see. But even given that, leaving `gnus-server-set-status'
alone, it might be fine to have `gnus-close-server' set a 'closed status
-- the server will just re-set it afterwards.
Alternately, we could just have `gnus-close-all-servers' set the status,
too.
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-25 19:33 ` Eric Abrahamsen
@ 2020-08-25 19:37 ` Lars Ingebrigtsen
2020-08-27 1:19 ` Eric Abrahamsen
0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-25 19:37 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: 42977
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> Okay, I see. But even given that, leaving `gnus-server-set-status'
> alone, it might be fine to have `gnus-close-server' set a 'closed status
> -- the server will just re-set it afterwards.
Sure. I haven't looked at all the callers, though, but I guess it's a
simplification.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-25 19:37 ` Lars Ingebrigtsen
@ 2020-08-27 1:19 ` Eric Abrahamsen
2020-08-27 13:37 ` Lars Ingebrigtsen
0 siblings, 1 reply; 12+ messages in thread
From: Eric Abrahamsen @ 2020-08-27 1:19 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 42977
[-- Attachment #1: Type: text/plain, Size: 597 bytes --]
On 08/25/20 21:37 PM, Lars Ingebrigtsen wrote:
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Okay, I see. But even given that, leaving `gnus-server-set-status'
>> alone, it might be fine to have `gnus-close-server' set a 'closed status
>> -- the server will just re-set it afterwards.
>
> Sure. I haven't looked at all the callers, though, but I guess it's a
> simplification.
I think it's more a matter of reducing confusion for hackers. If I do
`gnus-close-server' followed by `gnus-server-status', it tells me the
server is open -- not very helpful.
The patch is pretty simple.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: close-gnus-servers.diff --]
[-- Type: text/x-patch, Size: 1446 bytes --]
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 97e10a37a2..d613bc86ad 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -4300,8 +4300,7 @@ gnus-group-suspend
;; Closing all the backends is useful (for instance) when when the
;; IP addresses have changed and you need to reconnect.
(dolist (elem gnus-opened-servers)
- (gnus-close-server (car elem))
- (setcar (cdr elem) 'closed))
+ (gnus-close-server (car elem)))
(when group-buf
(bury-buffer group-buf)
(delete-windows-on group-buf t))))
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 60ebc07c34..da385a1802 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -351,9 +351,12 @@ gnus-close-server
"Close the connection to GNUS-COMMAND-METHOD."
(when (stringp gnus-command-method)
(setq gnus-command-method (gnus-server-to-method gnus-command-method)))
- (funcall (gnus-get-function gnus-command-method 'close-server)
- (nth 1 gnus-command-method)
- (nthcdr 2 gnus-command-method)))
+ (prog1
+ (funcall (gnus-get-function gnus-command-method 'close-server)
+ (nth 1 gnus-command-method)
+ (nthcdr 2 gnus-command-method))
+ (when-let ((elem (assoc gnus-command-method gnus-opened-servers)))
+ (setf (nth 1 elem) 'closed))))
(defun gnus-request-list (gnus-command-method)
"Request the active file from GNUS-COMMAND-METHOD."
^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-27 1:19 ` Eric Abrahamsen
@ 2020-08-27 13:37 ` Lars Ingebrigtsen
2020-08-27 21:20 ` Eric Abrahamsen
0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-27 13:37 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: 42977
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> I think it's more a matter of reducing confusion for hackers. If I do
> `gnus-close-server' followed by `gnus-server-status', it tells me the
> server is open -- not very helpful.
>
> The patch is pretty simple.
Looks good to me.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration
2020-08-27 13:37 ` Lars Ingebrigtsen
@ 2020-08-27 21:20 ` Eric Abrahamsen
0 siblings, 0 replies; 12+ messages in thread
From: Eric Abrahamsen @ 2020-08-27 21:20 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 42977, 42977-done
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> I think it's more a matter of reducing confusion for hackers. If I do
>> `gnus-close-server' followed by `gnus-server-status', it tells me the
>> server is open -- not very helpful.
>>
>> The patch is pretty simple.
>
> Looks good to me.
Cool, in it goes. It turns out the signal needed to be :system after
all, not :session, so I made that change as well, and am closing this
report.
Thanks,
Eric
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2020-08-27 21:20 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-21 20:43 bug#42977: 28.0.50; New gnus-dbus library providing (optional) D-Bus->Gnus integration Eric Abrahamsen
2020-08-22 6:33 ` Eli Zaretskii
2020-08-22 13:53 ` Lars Ingebrigtsen
2020-08-22 18:00 ` Eric Abrahamsen
2020-08-23 12:27 ` Lars Ingebrigtsen
2020-08-25 17:43 ` Eric Abrahamsen
2020-08-25 19:21 ` Lars Ingebrigtsen
2020-08-25 19:33 ` Eric Abrahamsen
2020-08-25 19:37 ` Lars Ingebrigtsen
2020-08-27 1:19 ` Eric Abrahamsen
2020-08-27 13:37 ` Lars Ingebrigtsen
2020-08-27 21:20 ` Eric Abrahamsen
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.