From 02829c7771a1f7a0c00d607a924fb8f56d2f3dd6 Mon Sep 17 00:00:00 2001 From: Gustavo Barros Date: Wed, 3 Jun 2020 08:57:53 -0300 Subject: [PATCH] date/time prompt: Provide support for HHhMM time input * lisp/org.el (org-read-date-analyze): Add support for HHhMM time input, in similar way as for am/pm times. * doc/org-manual.org (The date/time prompt): Add example to illustrate the feature. TINYCHANGE --- doc/org-manual.org | 1 + lisp/org.el | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/doc/org-manual.org b/doc/org-manual.org index 92252179b..bfd2aea1f 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -6017,6 +6017,7 @@ dash(es) as the separator in the former case and use =+= as the separator in the latter case, e.g.: | =11am-1:15pm= | \rArr{} 11:00-13:15 | +| =11h-13h15= | \rArr{} same as above | | =11am--1:15pm= | \rArr{} same as above | | =11am+2:15= | \rArr{} same as above | diff --git a/lisp/org.el b/lisp/org.el index b869e12e1..8333e1a5a 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -13981,6 +13981,19 @@ user." (setq ans (replace-match (format "%02d:%02d" hour minute) t t ans)))) + ;; Help matching HHhMM times, similarly as for am/pm times. + (cl-loop for i from 1 to 2 do ; twice, for end time as well + (when (and (not (string-match "\\(\\`\\|[^+]\\)[012]?[0-9]:[0-9][0-9]\\([ \t\n]\\|$\\)" ans)) + (string-match "\\(?:\\(?1:[012]?[0-9]\\)?h\\(?2:[0-5][0-9]\\)\\)\\|\\(?:\\(?1:[012]?[0-9]\\)h\\(?2:[0-5][0-9]\\)?\\)\\>" ans)) + (setq hour (if (match-end 1) + (string-to-number (match-string 1 ans)) + 0) + minute (if (match-end 2) + (string-to-number (match-string 2 ans)) + 0)) + (setq ans (replace-match (format "%02d:%02d" hour minute) + t t ans)))) + ;; Check if a time range is given as a duration (when (string-match "\\([012]?[0-9]\\):\\([0-6][0-9]\\)\\+\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)?" ans) (setq hour (string-to-number (match-string 1 ans)) -- 2.17.1