summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2010-02-25 16:03:38 +0100
committerBastien Guerry <bzg@altern.org>2010-02-25 16:03:38 +0100
commit1759ccd4db2e843bf24c21f91ebb51a75b7b865d (patch)
treec201748efde76acdb1424f60c43972cfdd5d4fae
parent1b1433e0791030da6c617e82166d1e6f3ce81fd7 (diff)
downloadorg-mode-1759ccd4db2e843bf24c21f91ebb51a75b7b865d.tar.gz
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.
-rwxr-xr-xlisp/ChangeLog6
-rw-r--r--lisp/org-timer.el54
2 files changed, 26 insertions, 34 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fe7c98a..425a285 100755
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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>
diff --git a/lisp/org-timer.el b/lisp/org-timer.el
index 84d3255..e4cb0a7 100644
--- a/lisp/org-timer.el
+++ b/lisp/org-timer.el
@@ -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)