diff lisp/emacs-lisp/timer.el @ 55599:055b9a2c6093

(timer-activate): Add optional arg triggered-p. Use it to set triggered-p element of timer. (timer-event-handler): Set triggered-p element non-nil while running the timer function.
author Kim F. Storm <storm@cua.dk>
date Fri, 14 May 2004 23:09:35 +0000
parents 695cf19ef79e
children d1f4ffb8ca41
line wrap: on
line diff
--- a/lisp/emacs-lisp/timer.el	Fri May 14 23:08:54 2004 +0000
+++ b/lisp/emacs-lisp/timer.el	Fri May 14 23:09:35 2004 +0000
@@ -161,7 +161,7 @@
   (aset timer 6 args)
   timer)
 
-(defun timer-activate (timer)
+(defun timer-activate (timer &optional triggered-p)
   "Put TIMER on the list of active timers."
   (if (and (timerp timer)
 	   (integerp (aref timer 1))
@@ -184,7 +184,7 @@
 	(if last
 	    (setcdr last (cons timer timers))
 	  (setq timer-list (cons timer timers)))
-	(aset timer 0 nil)
+	(aset timer 0 triggered-p)
 	(aset timer 7 nil)
 	nil)
     (error "Invalid or uninitialized timer")))
@@ -270,7 +270,7 @@
   (setq timer-event-last timer)
   (let ((inhibit-quit t))
     (if (timerp timer)
-	(progn
+	(let (retrigger)
 	  ;; Delete from queue.
 	  (cancel-timer timer)
 	  ;; Re-schedule if requested.
@@ -287,13 +287,16 @@
 				      (aref timer 4))))
 		      (if (> repeats timer-max-repeats)
 			  (timer-inc-time timer (* (aref timer 4) repeats)))))
-		(timer-activate timer)))
+		(timer-activate timer t)
+		(setq retrigger t)))
 	  ;; Run handler.
 	  ;; We do this after rescheduling so that the handler function
 	  ;; can cancel its own timer successfully with cancel-timer.
 	  (condition-case nil
 	      (apply (aref timer 5) (aref timer 6))
-	    (error nil)))
+	    (error nil))
+	  (if retrigger
+	      (aset timer 7 nil)))
       (error "Bogus timer event"))))
 
 ;; This function is incompatible with the one in levents.el.