From ab7961c3cea92271d803fdb3df89663e9c9a88ab Mon Sep 17 00:00:00 2001 From: Puneeth Chaganti Date: Sat, 5 Feb 2011 12:08:10 +0530 Subject: [PATCH] Fix regex for finding datetree year subtree * org-datetree.el (org-datetree-find-year-create): Use `org-datetree-base-level' in the regex to find year subtree. On Sat, Feb 5, 2011 at 9:57 AM, Puneeth Chaganti wrote: > >> On Sat, Feb 5, 2011 at 6:02 AM, Charles Cave wrote: >> In early January I posted what I thought was a bug report with org-capture. >> >> I found that capturing to a date-tree didn't always work and in one file the >> capture was written to the wrong place. >> >> Well, the problem was with the data! One of my headings began with 2011. >> >> The tree looked something like this (edited) >> >> * 2010 >> ** 2010-12 December >> *** 2010-12-05 Sunday >> **** A heading >> **** 2011 Actions <---------- this caused the problem >> **** Another heading >> ... >> *** 2010-12-06 Monday >> ... >> ... >> >> > In 2011 when I captured into this file's date-tree, > org-capture found the headline 2011 Actions which matched the algorithm > and the captured item appeared at the end of the headings at that level. > >> My suggestion to eliminate the problem is to modify the org-capture algorithm >> so years have to match beginning of line + one asterisk + one space + the year >> >> Similarly, months could match beginning of line + two asterisks + one space + >> the year + hyphen + month number + space + Monthname. But the chance of this >> format heading appearing outside a date-tree would be very low. > > org-datetree currently checks if a buffer has an entry with a DATE_TREE > property (any value), and if it finds one, the date tree will become a > subtree under that entry. > > This change would break that feature. Using the value of `org-datetree-base-level' in the regex instead of checking for at least one star, or hard coding the number of stars (as suggested by Charles Cave). Also, only the regex for finding the year subtree needs to be changed, since it is assumed that all the children of this subtree are "generated" and there are no bad headings, like in Charles' example. --- lisp/org-datetree.el | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/lisp/org-datetree.el b/lisp/org-datetree.el index 8014f8f..5c48f86 100644 --- a/lisp/org-datetree.el +++ b/lisp/org-datetree.el @@ -64,7 +64,8 @@ tree can be found." (goto-char (prog1 (point) (widen)))))) (defun org-datetree-find-year-create (year) - (let ((re "^\\*+[ \t]+\\([12][0-9][0-9][0-9]\\)[ \t\n]") + (let* ((n org-datetree-base-level) + (re (format "^\\*\\{%s\\}[ \t]+\\([12][0-9][0-9][0-9]\\)[ \t\n]" n)) match) (goto-char (point-min)) (while (and (setq match (re-search-forward re nil t)) -- 1.7.3.5