Update org-timer.el so that we only allow one timer.

Also get rid of a bug: as timers where not properly canceled,
`org-timer-show-remaining-time' was not giving the proper result.

Thanks to Frédéric Couchet for this catch.
This commit is contained in:
Bastien Guerry 2010-02-25 16:03:38 +01:00
parent 1b1433e079
commit 1759ccd4db
2 changed files with 26 additions and 34 deletions

View File

@ -1,5 +1,11 @@
2010-02-25 Bastien Guerry <bzg@altern.org>
* org-timer.el (org-timer-current-timer): Renamed from
`org-timer-last-timer'.
(org-timer-timer1, org-timer-timer2, org-timer-timer3): Removed.
(org-timer-cancel-timer, org-timer-show-remaining-time)
(org-timer-set-timer): Update to use only one timer.
* org.el (org-set-property): Remove useless space in the prompt.
2010-02-25 Carsten Dominik <carsten.dominik@gmail.com>

View File

@ -275,38 +275,28 @@ VALUE can be `on', `off', or `pause'."
(concat " <" (substring (org-timer-value-string) 0 -1) ">"))
(force-mode-line-update)))
(defvar org-timer-timer1 nil)
(defvar org-timer-timer2 nil)
(defvar org-timer-timer3 nil)
(defvar org-timer-last-timer nil)
(defun org-timer-cancel-timers ()
"Reset all timers."
(defvar org-timer-current-timer nil)
(defun org-timer-cancel-timer ()
"Cancel the current timer."
(interactive)
(mapc (lambda(timer)
(when (eval timer)
(run-hooks 'org-timer-cancel-hook)
(cancel-timer timer)
(setq timer nil)))
'(org-timer-timer1
org-timer-timer2
org-timer-timer3))
(message "All timers reset"))
(when (eval org-timer-current-timer)
(run-hooks 'org-timer-cancel-hook)
(cancel-timer org-timer-current-timer)
(setq org-timer-current-timer nil))
(message "Last timer canceled"))
(defun org-timer-show-remaining-time ()
"Display the remaining time before the timer ends."
(interactive)
(require 'time)
(if (and (not org-timer-timer1)
(not org-timer-timer2)
(not org-timer-timer3))
(if (not org-timer-current-timer)
(message "No timer set")
(let* ((rtime (decode-time
(time-subtract (timer--time org-timer-last-timer)
(time-subtract (timer--time org-timer-current-timer)
(current-time))))
(rsecs (nth 0 rtime))
(rmins (nth 1 rtime)))
(message "%d minutes %d seconds left before next time out"
(message "%d minute(s) %d seconds left before next time out"
rmins rsecs))))
;;;###autoload
@ -333,19 +323,15 @@ VALUE can be `on', `off', or `pause'."
(org-get-heading))
(t (error "Not in an Org buffer"))))
timer-set)
(mapcar (lambda(timer)
(when (not (or (eval timer) timer-set))
(setq timer-set t)
(setq org-timer-last-timer
(run-with-timer
secs nil '(lambda ()
(org-notify (format "%s: time out" hl) t)
(run-hooks 'org-timer-done-hook))))
(set timer org-timer-last-timer)
(run-hooks 'org-timer-set-hook)))
'(org-timer-timer1
org-timer-timer2
org-timer-timer3)))))
(if org-timer-current-timer
(error "You cannot run several timers at the same time")
(setq org-timer-current-timer
(run-with-timer
secs nil `(lambda ()
(setq org-timer-current-timer nil)
(org-notify ,(format "%s: time out" hl) t)
(run-hooks 'org-timer-done-hook))))
(run-hooks 'org-timer-set-hook)))))
(provide 'org-timer)