Reading dates: Fix a bug, and allow American-style dates
This patch implements reading American dates, like 2/5/3 --> 2003-02-05 2/5 --> ????-02-05 Is also fixes a bug that would force the current year when reading a date like 2/5 (American) or 2-5 (ISO), and in this way would prevent `org-read-date-prefer-future' to do its job. This bug was reported by Lukasz Stelmach.
This commit is contained in:
parent
32da182a90
commit
dd6043cb3a
|
@ -1,3 +1,8 @@
|
||||||
|
2010-02-26 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
|
* org.texi (The date/time prompt): Document that we accept dates
|
||||||
|
like month/day/year.
|
||||||
|
|
||||||
2010-02-25 Carsten Dominik <carsten.dominik@gmail.com>
|
2010-02-25 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
* org.texi (Faces for TODO keywords, Faces for TODO keywords)
|
* org.texi (Faces for TODO keywords, Faces for TODO keywords)
|
||||||
|
|
|
@ -5046,8 +5046,10 @@ in @b{bold}.
|
||||||
|
|
||||||
@example
|
@example
|
||||||
3-2-5 --> 2003-02-05
|
3-2-5 --> 2003-02-05
|
||||||
|
2/5/3 --> 2003-02-05
|
||||||
14 --> @b{2006}-@b{06}-14
|
14 --> @b{2006}-@b{06}-14
|
||||||
12 --> @b{2006}-@b{07}-12
|
12 --> @b{2006}-@b{07}-12
|
||||||
|
2/5 --> @b{2003}-02-05
|
||||||
Fri --> nearest Friday (defaultdate or later)
|
Fri --> nearest Friday (defaultdate or later)
|
||||||
sep 15 --> @b{2006}-09-15
|
sep 15 --> @b{2006}-09-15
|
||||||
feb 15 --> @b{2007}-02-15
|
feb 15 --> @b{2007}-02-15
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2010-02-26 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
|
* org.el (org-read-date-analyze): Match American-style dates, like
|
||||||
|
5/30 or 5/13/7. Make sure cal-iso.el is loaded. Don't force he
|
||||||
|
current year when reading ISO and American dates.
|
||||||
|
|
||||||
2010-02-25 Carsten Dominik <carsten.dominik@gmail.com>
|
2010-02-25 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
* org.el (org-face-from-face-or-color): New function.
|
* org.el (org-face-from-face-or-color): New function.
|
||||||
|
|
29
lisp/org.el
29
lisp/org.el
|
@ -13428,7 +13428,7 @@ user."
|
||||||
(let ((nowdecode (decode-time (current-time)))
|
(let ((nowdecode (decode-time (current-time)))
|
||||||
delta deltan deltaw deltadef year month day
|
delta deltan deltaw deltadef year month day
|
||||||
hour minute second wday pm h2 m2 tl wday1
|
hour minute second wday pm h2 m2 tl wday1
|
||||||
iso-year iso-weekday iso-week iso-year iso-date futurep)
|
iso-year iso-weekday iso-week iso-year iso-date futurep kill-year)
|
||||||
(setq org-read-date-analyze-futurep nil)
|
(setq org-read-date-analyze-futurep nil)
|
||||||
(when (string-match "\\`[ \t]*\\.[ \t]*\\'" ans)
|
(when (string-match "\\`[ \t]*\\.[ \t]*\\'" ans)
|
||||||
(setq ans "+0"))
|
(setq ans "+0"))
|
||||||
|
@ -13443,22 +13443,38 @@ user."
|
||||||
;; If yes, store the info and postpone interpreting it until the rest
|
;; If yes, store the info and postpone interpreting it until the rest
|
||||||
;; of the parsing is done
|
;; of the parsing is done
|
||||||
(when (string-match "\\<\\(?:\\([0-9]+\\)-\\)?[wW]\\([0-9]\\{1,2\\}\\)\\(?:-\\([0-6]\\)\\)?\\([ \t]\\|$\\)" ans)
|
(when (string-match "\\<\\(?:\\([0-9]+\\)-\\)?[wW]\\([0-9]\\{1,2\\}\\)\\(?:-\\([0-6]\\)\\)?\\([ \t]\\|$\\)" ans)
|
||||||
(setq iso-year (if (match-end 1) (org-small-year-to-year (string-to-number (match-string 1 ans))))
|
(setq iso-year (if (match-end 1)
|
||||||
iso-weekday (if (match-end 3) (string-to-number (match-string 3 ans)))
|
(org-small-year-to-year
|
||||||
|
(string-to-number (match-string 1 ans))))
|
||||||
|
iso-weekday (if (match-end 3)
|
||||||
|
(string-to-number (match-string 3 ans)))
|
||||||
iso-week (string-to-number (match-string 2 ans)))
|
iso-week (string-to-number (match-string 2 ans)))
|
||||||
(setq ans (replace-match "" t t ans)))
|
(setq ans (replace-match "" t t ans)))
|
||||||
|
|
||||||
;; Help matching ISO dates with single digit month ot day, like 2006-8-11.
|
;; Help matching ISO dates with single digit month or day, like 2006-8-11.
|
||||||
(when (string-match
|
(when (string-match
|
||||||
"^ *\\(\\([0-9]+\\)-\\)?\\([0-1]?[0-9]\\)-\\([0-3]?[0-9]\\)\\([^-0-9]\\|$\\)" ans)
|
"^ *\\(\\([0-9]+\\)-\\)?\\([0-1]?[0-9]\\)-\\([0-3]?[0-9]\\)\\([^-0-9]\\|$\\)" ans)
|
||||||
(setq year (if (match-end 2)
|
(setq year (if (match-end 2)
|
||||||
(string-to-number (match-string 2 ans))
|
(string-to-number (match-string 2 ans))
|
||||||
(string-to-number (format-time-string "%Y")))
|
(progn (setq kill-year t)
|
||||||
|
(string-to-number (format-time-string "%Y"))))
|
||||||
month (string-to-number (match-string 3 ans))
|
month (string-to-number (match-string 3 ans))
|
||||||
day (string-to-number (match-string 4 ans)))
|
day (string-to-number (match-string 4 ans)))
|
||||||
(if (< year 100) (setq year (+ 2000 year)))
|
(if (< year 100) (setq year (+ 2000 year)))
|
||||||
(setq ans (replace-match (format "%04d-%02d-%02d\\5" year month day)
|
(setq ans (replace-match (format "%04d-%02d-%02d\\5" year month day)
|
||||||
t nil ans)))
|
t nil ans)))
|
||||||
|
;; Help matching american dates, like 5/30 or 5/30/7
|
||||||
|
(when (string-match
|
||||||
|
"^ *\\([0-3]?[0-9]\\)/\\([0-1]?[0-9]\\)\\(/\\([0-9]+\\)\\)?\\([^/0-9]\\|$\\)" ans)
|
||||||
|
(setq year (if (match-end 4)
|
||||||
|
(string-to-number (match-string 4 ans))
|
||||||
|
(progn (setq kill-year t)
|
||||||
|
(string-to-number (format-time-string "%Y"))))
|
||||||
|
month (string-to-number (match-string 1 ans))
|
||||||
|
day (string-to-number (match-string 2 ans)))
|
||||||
|
(if (< year 100) (setq year (+ 2000 year)))
|
||||||
|
(setq ans (replace-match (format "%04d-%02d-%02d\\5" year month day)
|
||||||
|
t nil ans)))
|
||||||
;; Help matching am/pm times, because `parse-time-string' does not do that.
|
;; Help matching am/pm times, because `parse-time-string' does not do that.
|
||||||
;; If there is a time with am/pm, and *no* time without it, we convert
|
;; If there is a time with am/pm, and *no* time without it, we convert
|
||||||
;; so that matching will be successful.
|
;; so that matching will be successful.
|
||||||
|
@ -13504,7 +13520,7 @@ user."
|
||||||
(nth 3 tl) (< (nth 3 tl) (nth 3 nowdecode)))
|
(nth 3 tl) (< (nth 3 tl) (nth 3 nowdecode)))
|
||||||
(prog1 (1+ (nth 4 nowdecode)) (setq futurep t))
|
(prog1 (1+ (nth 4 nowdecode)) (setq futurep t))
|
||||||
(nth 4 defdecode)))
|
(nth 4 defdecode)))
|
||||||
year (or (nth 5 tl)
|
year (or (and (not kill-year) (nth 5 tl))
|
||||||
(if (and org-read-date-prefer-future
|
(if (and org-read-date-prefer-future
|
||||||
(nth 4 tl) (< (nth 4 tl) (nth 4 nowdecode)))
|
(nth 4 tl) (< (nth 4 tl) (nth 4 nowdecode)))
|
||||||
(prog1 (1+ (nth 5 nowdecode)) (setq futurep t))
|
(prog1 (1+ (nth 5 nowdecode)) (setq futurep t))
|
||||||
|
@ -13531,6 +13547,7 @@ user."
|
||||||
(cond
|
(cond
|
||||||
(iso-week
|
(iso-week
|
||||||
;; There was an iso week
|
;; There was an iso week
|
||||||
|
(require 'cal-iso)
|
||||||
(setq futurep nil)
|
(setq futurep nil)
|
||||||
(setq year (or iso-year year)
|
(setq year (or iso-year year)
|
||||||
day (or iso-weekday wday 1)
|
day (or iso-weekday wday 1)
|
||||||
|
|
Loading…
Reference in New Issue