Function: timer--activate

timer--activate is a byte-compiled function defined in timer.el.gz.

Signature

(timer--activate TIMER &optional TRIGGERED-P REUSE-CELL IDLE)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/timer.el.gz
(defun timer--activate (timer &optional triggered-p reuse-cell idle)
  (let ((timers (if idle timer-idle-list timer-list))
	last)
    (cond
     ((not (and (timerp timer)
                (integerp (timer--high-seconds timer))
                (integerp (timer--low-seconds timer))
                (integerp (timer--usecs timer))
                (integerp (timer--psecs timer))
                (timer--function timer)))
      (error "Invalid or uninitialized timer"))
     ;; FIXME: This is not reliable because `idle-delay' is only set late,
     ;; by `timer-activate-when-idle' :-(
     ;;((not (eq (not idle)
     ;;          (not (timer--idle-delay timer))))
     ;; (error "idle arg %S out of sync with idle-delay field of timer: %S"
     ;;        idle timer))
     ((memq timer timers)
      (error "Timer already activated"))
     (t
      ;; Skip all timers to trigger before the new one.
      (while (and timers (timer--time-less-p (car timers) timer))
	(setq last timers
	      timers (cdr timers)))
      (if reuse-cell
	  (progn
	    (setcar reuse-cell timer)
	    (setcdr reuse-cell timers))
	(setq reuse-cell (cons timer timers)))
      ;; Insert new timer after last which possibly means in front of queue.
      (setf (cond (last (cdr last))
                  (idle timer-idle-list)
                  (t    timer-list))
            reuse-cell)
      (setf (timer--triggered timer) triggered-p)
      (setf (timer--idle-delay timer) idle)
      nil))))