anchor.diff:      (not (null updating-timers))))
   
   (defun shortest-wait-timers ()
  -  (if (null *timer-list*)
  -      nil
  -      (- (loop :for timer :in *timer-list*
  -               :minimize (timer-next-time timer))
  -         (get-internal-real-time))))
  +  (let ((timers (if *is-in-idle*
  +                    (append *timer-list* *idle-timer-list*)
  +                    *timer-list*)))
  +    (if (null timers)
  +        nil
  +        (- (loop :for timer :in timers
  +                 :minimize (timer-next-time timer))
  +           (get-internal-real-time)))))
   
   (defun exist-running-timer-p ()
  -  (not (null *timer-list*)))
  +  (if *is-in-idle*
  +      (or (not (null *timer-list*))
  +          (not (null *idle-timer-list*)))
  +      (not (null *timer-list*))))
   
   (defun start-idle-timer (ms repeat-p function &optional handle-function name)
     (let ((timer (make-instance 'timer
  
positive.code:           stop-timer
            alive-timer-p))
  
  (defvar *timer-list* nil)
  (defvar *idle-timer-list* nil)
  
  (defclass timer ()
    ((name
  
negative.code:     timer))
  
  (defun start-idle-timers ()
    (progn
      (setf *is-in-idle* t)
      (dolist (timer *idle-timer-list*)
        (setf (timer-last-time timer) (get-internal-real-time))
        (setf (timer-alive-p timer) t))))
  
  (defun stop-idle-timers ()
    (progn
      (setf *is-in-idle* nil)
      (setf *idle-timer-list* (nconc *processed-idle-timer-list* *idle-timer-list*))
      (setf *processed-idle-timer-list* '())))
  