summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrice Waegeneire <brice.wge@gmail.com>2015-06-02 22:49:38 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2015-06-02 23:18:13 +0200
commit93cc5fb5177e1e9e5dd1303431bb5eefd082d707 (patch)
tree3d40f14c5063af76bf8a2cff1522c1fb0a44dee0
parent03936a50f4fe9a261577d467098ed1080c61cb6e (diff)
downloadorg-mode-93cc5fb5177e1e9e5dd1303431bb5eefd082d707.tar.gz
org-timer.el: hh:mm:ss format for setting a timer
* lisp/org-timer.el (org-timer-set-timer): Add support for hh:mm:ss format. (org-timer-default-timer): Type changed from number to string. * testing/lisp/test-org-timer.el (test-org-timer/set-timer): Add hh:mm:ss format in the test.
-rw-r--r--lisp/org-timer.el34
-rw-r--r--testing/lisp/test-org-timer.el8
2 files changed, 26 insertions, 16 deletions
diff --git a/lisp/org-timer.el b/lisp/org-timer.el
index 0593573..ffaeffc 100644
--- a/lisp/org-timer.el
+++ b/lisp/org-timer.el
@@ -65,12 +65,13 @@ the value of the timer."
:group 'org-time
:type 'string)
-(defcustom org-timer-default-timer 0
- "The default timer when a timer is set.
+(defcustom org-timer-default-timer "0"
+ "The default timer when a timer is set, in minutes or hh:mm:ss format.
When 0, the user is prompted for a value."
:group 'org-time
- :version "24.1"
- :type 'number)
+ :version "25.1"
+ :package-version '(Org . "8.3")
+ :type 'string)
(defcustom org-timer-display 'mode-line
"When a timer is running, org-mode can display it in the mode
@@ -402,14 +403,14 @@ VALUE can be `on', `off', or `pause'."
;;;###autoload
(defun org-timer-set-timer (&optional opt)
- "Prompt for a duration and set a timer.
+ "Prompt for a duration in minutes or hh:mm:ss and set a timer.
If `org-timer-default-timer' is not zero, suggest this value as
the default duration for the timer. If a timer is already set,
prompt the user if she wants to replace it.
Called with a numeric prefix argument, use this numeric value as
-the duration of the timer.
+the duration of the timer in minutes.
Called with a `C-u' prefix arguments, use `org-timer-default-timer'
without prompting the user for a duration.
@@ -429,18 +430,19 @@ using three `C-u' prefix arguments."
(minutes (or (and (not (equal opt '(64)))
effort-minutes
(number-to-string effort-minutes))
- (and (numberp opt) (number-to-string opt))
- (and (listp opt) (not (null opt))
- (number-to-string org-timer-default-timer))
- (read-from-minibuffer
- "How many minutes left? "
- (if (not (eq org-timer-default-timer 0))
- (number-to-string org-timer-default-timer))))))
+ (and (numberp opt) (number-to-string opt))
+ (and (consp opt) org-timer-default-timer)
+ (and (stringp opt) opt)
+ (read-from-minibuffer
+ "How much time left? (minutes or h:mm:ss) "
+ (and (not (string-equal org-timer-default-timer "0"))
+ org-timer-default-timer)))))
+ (when (string-match "\\`[0-9]+\\'" minutes)
+ (setq minutes (concat minutes ":00")))
(if (not (string-match "[0-9]+" minutes))
(org-timer-show-remaining-time)
- (let* ((mins (string-to-number (match-string 0 minutes)))
- (secs (* mins 60))
- (hl (org-timer--get-timer-title)))
+ (let ((secs (org-timer-hms-to-secs (org-timer-fix-incomplete minutes)))
+ (hl (org-timer--get-timer-title)))
(if (or (not org-timer-countdown-timer)
(equal opt '(16))
(y-or-n-p "Replace current timer? "))
diff --git a/testing/lisp/test-org-timer.el b/testing/lisp/test-org-timer.el
index 7164a5d..8abbb85 100644
--- a/testing/lisp/test-org-timer.el
+++ b/testing/lisp/test-org-timer.el
@@ -178,6 +178,14 @@ Also, mute output from `message'."
(org-timer-set-timer 10))
(test-org-timer/with-current-time test-org-timer/time1
(org-timer))
+ (org-trim (buffer-string)))))
+ (should
+ (equal "0:00:04"
+ (test-org-timer/with-temp-text ""
+ (test-org-timer/with-current-time test-org-timer/time0
+ (org-timer-set-timer "3:30"))
+ (test-org-timer/with-current-time test-org-timer/time1
+ (org-timer))
(org-trim (buffer-string))))))
(ert-deftest test-org-timer/pause-timer ()