>>>> In <b9yad61zj3f.fsf(a)jpl.org> Katsumi Yamaoka
wrote:
By the way, when the first argument of run-at-time was nil or
zero, I noticed it working correctly yesterday, and made the
following functions. As far as I can know, it completely works
correctly. Probably it will replace nnheader-xmas-run-at-time.
I look for more smart solution for a while.
(defun run-at-time-in-the-right-way (time repeat function &rest
args)
Instead, I've installed the non-fsf-compat version in Gnus.
Here it is:
(defun nnheader-xmas-run-at-time (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 "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))))
--
Katsumi Yamaoka <yamaoka(a)jpl.org>