* nnheaderxm.el (nnheader-xmas-run-at-time): Make it work
authorKatsumi Yamaoka <yamaoka@jpl.org>
Wed, 10 Dec 2003 06:35:26 +0000 (06:35 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Wed, 10 Dec 2003 06:35:26 +0000 (06:35 +0000)
 correctly for the first argument.

* pgg.el (pgg-run-at-time): New function.
(pgg-add-passphrase-cache): Use it.

lisp/ChangeLog
lisp/nnheaderxm.el
lisp/pgg.el

index e4aea4f..87f2585 100644 (file)
@@ -1,3 +1,11 @@
+2003-12-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnheaderxm.el (nnheader-xmas-run-at-time): Make it work
+       correctly for the first argument.
+
+       * pgg.el (pgg-run-at-time): New function.
+       (pgg-add-passphrase-cache): Use it.
+
 2003-12-10  Simon Josefsson  <jas@extundo.com>
 
        * pgg-parse.el (pgg-decode-packets): Rewrite to handle corrupt
index 972067b..eb6304a 100644 (file)
@@ -1,6 +1,6 @@
 ;;; nnheaderxm.el --- making Gnus backends work under XEmacs
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
 ;;      Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;; Code:
 
 (defun nnheader-xmas-run-at-time (time repeat function &rest args)
-  (start-itimer
-   "nnheader-run-at-time"
-   `(lambda ()
-      (,function ,@args))
-   time repeat))
+  "Emulating function run as `run-at-time' in the right way.
+TIME should be nil meaning now or a number of seconds from now.
+Return an itimer object which can be used in either `delete-itimer'
+or `cancel-timer'."
+  (let ((itimers (list nil)))
+    (setcar
+     itimers
+     (apply #'start-itimer "nnheader-run-at-time"
+           (lambda (itimers repeat function &rest args)
+             (let ((itimer (car itimers)))
+               (if repeat
+                   (progn
+                     (set-itimer-function
+                      itimer
+                      (lambda (itimer repeat function &rest args)
+                        (set-itimer-restart itimer repeat)
+                        (set-itimer-function itimer function)
+                        (set-itimer-function-arguments itimer args)
+                        (apply function args)))
+                     (set-itimer-function-arguments
+                      itimer
+                      (append (list itimer repeat function) args)))
+                 (set-itimer-function
+                  itimer
+                  (lambda (itimer function &rest args)
+                    (delete-itimer itimer)
+                    (apply function args)))
+                 (set-itimer-function-arguments
+                  itimer
+                  (append (list itimer function) args)))))
+           1e-9 (if time (max time 1e-9) 1e-9)
+           nil t itimers repeat function args))))
 
 (defalias 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
 (defalias 'nnheader-cancel-timer 'delete-itimer)
index 0481898..047a4cf 100644 (file)
           (symbol-value (intern-soft key pgg-passphrase-cache)))
       (read-passwd prompt)))
 
+(eval-when-compile
+  (autoload 'delete-itimer "itimer")
+  (autoload 'set-itimer-function "itimer")
+  (autoload 'set-itimer-function-arguments "itimer")
+  (autoload 'set-itimer-restart "itimer"))
+
+(eval-and-compile
+  (defalias
+    'pgg-run-at-time
+    (if (featurep 'xemacs)
+       (lambda (time repeat function &rest args)
+         "Emulating function run as `run-at-time' in the right way.
+TIME should be nil meaning now or a number of seconds from now.
+Return an itimer object which can be used in either `delete-itimer'
+or `cancel-timer'."
+         (let ((itimers (list nil)))
+           (setcar
+            itimers
+            (apply #'start-itimer "pgg-run-at-time"
+                   (lambda (itimers repeat function &rest args)
+                     (let ((itimer (car itimers)))
+                       (if repeat
+                           (progn
+                             (set-itimer-function
+                              itimer
+                              (lambda (itimer repeat function &rest args)
+                                (set-itimer-restart itimer repeat)
+                                (set-itimer-function itimer function)
+                                (set-itimer-function-arguments itimer args)
+                                (apply function args)))
+                             (set-itimer-function-arguments
+                              itimer
+                              (append (list itimer repeat function) args)))
+                         (set-itimer-function
+                          itimer
+                          (lambda (itimer function &rest args)
+                            (delete-itimer itimer)
+                            (apply function args)))
+                         (set-itimer-function-arguments
+                          itimer
+                          (append (list itimer function) args)))))
+                   1e-9 (if time (max time 1e-9) 1e-9)
+                   nil t itimers repeat function args))))
+      'run-at-time)))
+
 (defun pgg-add-passphrase-cache (key passphrase)
   (setq key (pgg-truncate-key-identifier key))
   (set (intern key pgg-passphrase-cache)
        passphrase)
-  (run-at-time pgg-passphrase-cache-expiry nil
-              #'pgg-remove-passphrase-cache
-              key))
+  (pgg-run-at-time pgg-passphrase-cache-expiry nil
+                  #'pgg-remove-passphrase-cache
+                  key))
 
 (defun pgg-remove-passphrase-cache (key)
   (let ((passphrase (symbol-value (intern-soft key pgg-passphrase-cache))))