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.
This commit is contained in:
parent
0e01d5aa72
commit
585beb6c12
5 changed files with 102 additions and 0 deletions
|
@ -828,6 +828,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.
|
||||
|
||||
|
@ -22333,6 +22334,7 @@ to you, using @kbd{G b u} and updating the group will usually fix this.
|
|||
* 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 @@ CloudSynchronizationDataPack(TM)s. It's easiest to set this from the
|
|||
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
|
||||
|
||||
|
|
5
etc/NEWS
5
etc/NEWS
|
@ -295,6 +295,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'
|
||||
|
|
68
lisp/gnus/gnus-dbus.el
Normal file
68
lisp/gnus/gnus-dbus.el
Normal file
|
@ -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
|
|
@ -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 @@ prompt the user for the name of an NNTP server to use."
|
|||
(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)
|
||||
|
|
|
@ -292,6 +292,10 @@ is restarted, and sometimes reloaded."
|
|||
: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.")
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue