(gnus-summary-refer-thread): Implement a version that uses *-request-thread.
[gnus] / lisp / gnus-demon.el
index 3d943b6..9f992d5 100644 (file)
@@ -1,17 +1,17 @@
-;;; gnus-demon.el --- daemonic Gnus behaviour
+;;; gnus-demon.el --- daemonic Gnus behavior
 
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2003
-;;      Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 
 ;;; Commentary:
 
 (require 'nntp)
 (require 'nnmail)
 (require 'gnus-util)
 (require 'nntp)
 (require 'nnmail)
 (require 'gnus-util)
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (require 'itimer)
-    (require 'timer)))
+
+(autoload 'parse-time-string "parse-time" nil nil)
 
 (defgroup gnus-demon nil
 
 (defgroup gnus-demon nil
-  "Demonic behaviour."
+  "Demonic behavior."
   :group 'gnus)
 
 (defcustom gnus-demon-handlers nil
   :group 'gnus)
 
 (defcustom gnus-demon-handlers nil
@@ -96,7 +92,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
 
 (defun gnus-demon-remove-handler (function &optional no-init)
   "Remove the handler FUNCTION from the list of handlers."
 
 (defun gnus-demon-remove-handler (function &optional no-init)
   "Remove the handler FUNCTION from the list of handlers."
-  (gnus-pull function gnus-demon-handlers)
+  (gnus-alist-pull function gnus-demon-handlers)
   (unless no-init
     (gnus-demon-init)))
 
   (unless no-init
     (gnus-demon-init)))
 
@@ -107,7 +103,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   (when gnus-demon-handlers
     ;; Set up the timer.
     (setq gnus-demon-timer
   (when gnus-demon-handlers
     ;; Set up the timer.
     (setq gnus-demon-timer
-         (nnheader-run-at-time
+         (run-at-time
           gnus-demon-timestep gnus-demon-timestep 'gnus-demon))
     ;; Reset control variables.
     (setq gnus-demon-handler-state
           gnus-demon-timestep gnus-demon-timestep 'gnus-demon))
     ;; Reset control variables.
     (setq gnus-demon-handler-state
@@ -216,7 +212,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
                   (< idle gnus-demon-idle-time)) ; Idle timed out.
                  (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle.
               ;; So we call the handler.
                   (< idle gnus-demon-idle-time)) ; Idle timed out.
                  (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle.
               ;; So we call the handler.
-              (progn
+              (gnus-with-local-quit
                 (ignore-errors (funcall (car handler)))
                 ;; And reset the timer.
                 (setcar (nthcdr 1 handler)
                 (ignore-errors (funcall (car handler)))
                 ;; And reset the timer.
                 (setcar (nthcdr 1 handler)
@@ -230,28 +226,20 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
               (gnus-demon-is-idle-p))
          ;; We want to call this handler each and every time that
          ;; Emacs is idle.
               (gnus-demon-is-idle-p))
          ;; We want to call this handler each and every time that
          ;; Emacs is idle.
-         (ignore-errors (funcall (car handler))))
+         (gnus-with-local-quit
+           (ignore-errors (funcall (car handler)))))
         (t
          ;; We want to call this handler only if Emacs has been idle
          ;; for a specified number of timesteps.
          (and (not (memq (car handler) gnus-demon-idle-has-been-called))
               (< idle gnus-demon-idle-time)
               (gnus-demon-is-idle-p)
         (t
          ;; We want to call this handler only if Emacs has been idle
          ;; for a specified number of timesteps.
          (and (not (memq (car handler) gnus-demon-idle-has-been-called))
               (< idle gnus-demon-idle-time)
               (gnus-demon-is-idle-p)
-              (progn
+              (gnus-with-local-quit
                 (ignore-errors (funcall (car handler)))
                 ;; Make sure the handler won't be called once more in
                 ;; this idle-cycle.
                 (push (car handler) gnus-demon-idle-has-been-called)))))))))
 
                 (ignore-errors (funcall (car handler)))
                 ;; Make sure the handler won't be called once more in
                 ;; this idle-cycle.
                 (push (car handler) gnus-demon-idle-has-been-called)))))))))
 
-(defun gnus-demon-add-nocem ()
-  "Add daemonic NoCeM handling to Gnus."
-  (gnus-demon-add-handler 'gnus-demon-scan-nocem 60 30))
-
-(defun gnus-demon-scan-nocem ()
-  "Scan NoCeM groups for NoCeM messages."
-  (save-window-excursion
-    (gnus-nocem-scan-groups)))
-
 (defun gnus-demon-add-disconnection ()
   "Add daemonic server disconnection to Gnus."
   (gnus-demon-add-handler 'gnus-demon-close-connections nil 30))
 (defun gnus-demon-add-disconnection ()
   "Add daemonic server disconnection to Gnus."
   (gnus-demon-add-handler 'gnus-demon-close-connections nil 30))
@@ -264,7 +252,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   "Add daemonic nntp server disconnection to Gnus.
 If no commands have gone out via nntp during the last five
 minutes, the connection is closed."
   "Add daemonic nntp server disconnection to Gnus.
 If no commands have gone out via nntp during the last five
 minutes, the connection is closed."
-  (gnus-demon-add-handler 'gnus-demon-nntp-close-connections 5 nil))
+  (gnus-demon-add-handler 'gnus-demon-nntp-close-connection 5 nil))
 
 (defun gnus-demon-nntp-close-connection ()
   (save-window-excursion
 
 (defun gnus-demon-nntp-close-connection ()
   (save-window-excursion
@@ -294,11 +282,9 @@ minutes, the connection is closed."
   (let ((win (current-window-configuration)))
     (unwind-protect
        (save-window-excursion
   (let ((win (current-window-configuration)))
     (unwind-protect
        (save-window-excursion
-         (save-excursion
-           (when (gnus-alive-p)
-             (save-excursion
-               (set-buffer gnus-group-buffer)
-               (gnus-group-get-new-news)))))
+         (when (gnus-alive-p)
+           (with-current-buffer gnus-group-buffer
+             (gnus-group-get-new-news))))
       (set-window-configuration win))))
 
 (defun gnus-demon-add-scan-timestamps ()
       (set-window-configuration win))))
 
 (defun gnus-demon-add-scan-timestamps ()