I have took in consideration all of your points, is it better now? The current patch doesn't overwrite the present behavior of org-set-timer it only add the possibility to use hh:mm:ss format.
2015-04-24 18:49 GMT+02:00 Kyle Meyer <k...@kyleam.com>: > Brice Waegenire <brice....@gmail.com> wrote: >> Hello, >> >> I've hacked a patch that use hh:mm:ss format instead of minutes for >> org-timer-set-timer. I'm really not sure I did it in the right way, >> any sugestions are welcome. > [...] > > Thanks. > > I think it's nice to be able to specify seconds, but now you have to > type 'N:00' (or at least 'N:0') instead of 'N' to get N minutes. Should > a plain number default to minutes? I don't use org-timer very much, so > I don't have a strong preference. This seems like a better behavior > > >> --- a/lisp/org-timer.el >> +++ b/lisp/org-timer.el >> @@ -429,17 +429,14 @@ 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)) > > By removing the listp check, you no longer get the C-u behavior > described in the docstring. I've re-added the C-u functionality, I didn't understood the whole meaning of those lines. > >> + (and (stringp opt) (prin1 opt)) > > Why not `(and (stringp opt) opt)'? Because I don't really know how to program, but I was already thinking that this prin1 function wasn't the right way do to this. > >> (read-from-minibuffer >> - "How many minutes left? " >> + "How many time left? " > > s/many/much/. Also, it'd be nice to specify the format in the prompt. > >> (if (not (eq org-timer-default-timer 0)) >> - (number-to-string org-timer-default-timer)))))) >> + (prin1 org-timer-default-timer)))))) > > The defcustom for org-timer-default-timer still says it should be a > number. If set to a number other than 0, this will fail. Perhaps > org-timer-default-timer should be updated to be a string in the hh:mm:ss > format. > > -- > Kyle 2015-04-24 18:49 GMT+02:00 Kyle Meyer <k...@kyleam.com>: > Brice Waegenire <brice....@gmail.com> wrote: >> Hello, >> >> I've hacked a patch that use hh:mm:ss format instead of minutes for >> org-timer-set-timer. I'm really not sure I did it in the right way, >> any sugestions are welcome. > [...] > > Thanks. > > I think it's nice to be able to specify seconds, but now you have to > type 'N:00' (or at least 'N:0') instead of 'N' to get N minutes. Should > a plain number default to minutes? I don't use org-timer very much, so > I don't have a strong preference. > > >> --- a/lisp/org-timer.el >> +++ b/lisp/org-timer.el >> @@ -429,17 +429,14 @@ 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)) > > By removing the listp check, you no longer get the C-u behavior > described in the docstring. > >> + (and (stringp opt) (prin1 opt)) > > Why not `(and (stringp opt) opt)'? > >> (read-from-minibuffer >> - "How many minutes left? " >> + "How many time left? " > > s/many/much/. Also, it'd be nice to specify the format in the prompt. > >> (if (not (eq org-timer-default-timer 0)) >> - (number-to-string org-timer-default-timer)))))) >> + (prin1 org-timer-default-timer)))))) > > The defcustom for org-timer-default-timer still says it should be a > number. If set to a number other than 0, this will fail. Perhaps > org-timer-default-timer should be updated to be a string in the hh:mm:ss > format. > > -- > Kyle
From 8d6e379f3ed432511c613a0cf40804d2de1764b8 Mon Sep 17 00:00:00 2001 From: Brice Waegeneire <brice....@gmail.com> Date: Fri, 24 Apr 2015 14:18:45 +0200 Subject: [PATCH] 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. * testing/lisp/test-org-timer.el (test-org-timer/set-timer): Add hh:mm:ss format in the test. --- lisp/org-timer.el | 23 ++++++++++++----------- testing/lisp/test-org-timer.el | 8 ++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/lisp/org-timer.el b/lisp/org-timer.el index 0593573..022125f 100644 --- a/lisp/org-timer.el +++ b/lisp/org-timer.el @@ -65,12 +65,12 @@ 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) + :type 'string) (defcustom org-timer-display 'mode-line "When a timer is running, org-mode can display it in the mode @@ -402,14 +402,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. @@ -430,16 +430,17 @@ using three `C-u' prefix arguments." 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)) + (and (listp opt) (not (null opt)) org-timer-default-timer) + (and (stringp opt) opt) (read-from-minibuffer - "How many minutes left? " + "How much time left? (minutes or h:mm:ss) " (if (not (eq org-timer-default-timer 0)) - (number-to-string org-timer-default-timer)))))) + (eval org-timer-default-timer)))))) + (if (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)) + (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)) 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 () -- 2.3.7