Hello, Rüdiger Sonderfeld <ruedi...@c-plusplus.net> writes:
> * lisp/org-datetree.el (org-datetree--find-create): New function. > (org-datetree-find-year-create, org-datetree-find-month-create, > org-datetree-find-day-create): Removed functions > (org-datetree-find-date-create): Use `org-datetree--find-create' instead > of removed functions. Use calendar extract functions. > (org-datetree-insert-line): Do more formatting in `format-time-string' > since we call it anyway > * testing/lisp/test-org-datetree.el (test-org-datetree/find-date-create): > Test if new entries are put at the right place. Thank you. Minor comments follow. > --- > lisp/org-datetree.el | 77 > +++++++++------------------------------ > testing/lisp/test-org-datetree.el | 9 +++++ > 2 files changed, 27 insertions(+), 59 deletions(-) > > diff --git a/lisp/org-datetree.el b/lisp/org-datetree.el > index a97a9d0..3620bbd 100644 > --- a/lisp/org-datetree.el > +++ b/lisp/org-datetree.el > @@ -64,67 +64,30 @@ (defun org-datetree-find-date-create (date &optional > keep-restriction) > (org-get-valid-level (org-current-level) 1)) > (org-narrow-to-subtree))) > (goto-char (point-min)) > - (let ((year (nth 2 date)) > - (month (car date)) > - (day (nth 1 date))) > - (org-datetree-find-year-create year) > - (org-datetree-find-month-create year month) > - (org-datetree-find-day-create year month day)))) > - > -(defun org-datetree-find-year-create (year) > - "Find the YEAR datetree or create it." > - (let ((re "^\\*+[ \t]+\\([12][0-9]\\{3\\}\\)\\(\\s-*?\\([ > \t]:[[:alnum:]:_@#%]+:\\)?\\s-*$\\)") > + (let ((year (calendar-extract-year date)) > + (month (calendar-extract-month date)) > + (day (calendar-extract-day date))) > + (org-datetree--find-create "^\\*+[ > \t]+\\([12][0-9]\\{3\\}\\)\\(\\s-*?\\([ \t]:[[:alnum:]:_@#%%]+:\\)?\\s-*$\\)" > + year) > + (org-datetree--find-create "^\\*+[ \t]+%d-\\([01][0-9]\\) \\w+$" > + year month) > + (org-datetree--find-create "^\\*+[ \t]+%d-%02d-\\([0123][0-9]\\) \\w+$" > + year month day)))) > + > +(defun org-datetree--find-create (regex year &optional month day) > + "Find the datetree matched by REGEX for YEAR, MONTH, or DAY." You should add you are expecting something special in matching group 1, for comparison. > + (let ((re (format regex year month day)) > match) > (goto-char (point-min)) > (while (and (setq match (re-search-forward re nil t)) > (goto-char (match-beginning 1)) > - (< (string-to-number (match-string 1)) year))) > + (< (string-to-number (match-string 1)) (or day month year)))) > (cond > ((not match) > (goto-char (point-max)) > - (or (bolp) (newline)) > - (org-datetree-insert-line year)) > - ((= (string-to-number (match-string 1)) year) > - (goto-char (point-at-bol))) > - (t > - (beginning-of-line 1) > - (org-datetree-insert-line year))))) > - > -(defun org-datetree-find-month-create (year month) > - "Find the datetree for YEAR and MONTH or create it." > - (org-narrow-to-subtree) > - (let ((re (format "^\\*+[ \t]+%d-\\([01][0-9]\\) \\w+$" year)) > - match) > - (goto-char (point-min)) > - (while (and (setq match (re-search-forward re nil t)) > - (goto-char (match-beginning 1)) > - (< (string-to-number (match-string 1)) month))) > - (cond > - ((not match) > - (goto-char (point-max)) > - (or (bolp) (newline)) > - (org-datetree-insert-line year month)) > - ((= (string-to-number (match-string 1)) month) > - (goto-char (point-at-bol))) > - (t > - (beginning-of-line 1) > - (org-datetree-insert-line year month))))) > - > -(defun org-datetree-find-day-create (year month day) > - "Find the datetree for YEAR, MONTH and DAY or create it." > - (org-narrow-to-subtree) > - (let ((re (format "^\\*+[ \t]+%d-%02d-\\([0123][0-9]\\) \\w+$" year month)) > - match) > - (goto-char (point-min)) > - (while (and (setq match (re-search-forward re nil t)) > - (goto-char (match-beginning 1)) > - (< (string-to-number (match-string 1)) day))) > - (cond > - ((not match) > - (goto-char (point-max)) > - (or (bolp) (newline)) > + (unless (bolp) (newline)) While you're at it: (unless (bolp) (insert "\n")) > diff --git a/testing/lisp/test-org-datetree.el > b/testing/lisp/test-org-datetree.el > index d500130..0135ab9 100644 > --- a/testing/lisp/test-org-datetree.el > +++ b/testing/lisp/test-org-datetree.el > @@ -55,6 +55,15 @@ (ert-deftest test-org-datetree/find-date-create () > (let ((org-datetree-add-timestamp nil)) > (org-datetree-find-date-create '(3 29 2012))) > (org-trim (buffer-string))))) > + ;; Sort new entry in right place Missing full stop. Regards, -- Nicolas Goaziou