From cba852789713acf22a6fe054ef9d5c43e5bee107 Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Mon, 9 Nov 2009 15:24:11 +0100 Subject: [PATCH] Date tree ca be filed under entry. And reveal after jump. --- doc/org.texi | 30 +++++++++++++++++------------- lisp/org-agenda.el | 3 ++- lisp/org-datetree.el | 17 ++++++++++++++++- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index b9960a205..bf8d05081 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -5813,10 +5813,12 @@ to @code{org-remember-default-headline}. If the file name is not an absolute path, it will be interpreted relative to @code{org-directory}. The heading can also be the symbols @code{top} or @code{bottom} to send notes -as level 1 entries to the beginning or end of the file, respectively. I may -also be the symbol @code{date-tree}. Then, a tree with year on level 1, month -on level 2 and day on level three will be build in the file, and the entry -will be filed into the tree under the current date. +as level 1 entries to the beginning or end of the file, respectively. It may +also be the symbol @code{date-tree}. Then, a tree with year on level 1, +month on level 2 and day on level three will be build in the file, and the +entry will be filed into the tree under the current date@footnote{If the file +contains an entry with a @code{DATE_TREE} property, the entire date tree will +be build under that entry.} An optional sixth element specifies the contexts in which the user can select the template. This element can be a list of major modes or a function. @@ -7635,20 +7637,22 @@ date at the cursor. @item i @vindex org-agenda-diary-file Insert a new entry into the diary, using the date at the cursor and (for -clock entries) the date at the mark. This will add to the Emacs diary +block entries) the date at the mark. This will add to the Emacs diary file@footnote{This file is parsed for the agenda when @code{org-agenda-include-diary} is set.}, in a way similar to the @kbd{i} command in the calendar. The diary file will pop up in another window, where you can add the entry. -If you configure @code{org-agenda-diary-file} to point to an Org-mode file -instead, Org will create entries in that file. Most entries will be stored -in a date-based outline tree that will later make it easy to archive -appointments from previous months/years. Emacs will prompt you for the entry -text - if you specify it, the entry will be created in -@code{org-agenda-diary-file} without further interaction. If you directly -press @key{RET} at the prompt without typing text, the target file will be -shown in another window for you to finish the entry there. +If you configure @code{org-agenda-diary-file} to point to an Org-mode file, +Org will create entries (in org-mode syntax) in that file instead. Most +entries will be stored in a date-based outline tree that will later make it +easy to archive appointments from previous months/years. The tree will be +build under an entry with a @code{DATE_TREE} property, or else with years as +top-level entries. Emacs will prompt you for the entry text - if you specify +it, the entry will be created in @code{org-agenda-diary-file} without further +interaction. If you directly press @key{RET} at the prompt without typing +text, the target file will be shown in another window for you to finish the +entry there. See also the @kbd{k r} command. @c @kindex M @item M diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 92febb745..3b3a5bc58 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -6675,7 +6675,8 @@ The cursor may be at a date in the calendar, or in the Org agenda." ((equal char ?j) (org-switch-to-buffer-other-window (find-file-noselect org-agenda-diary-file)) - (org-datetree-find-date-create d1)) + (org-datetree-find-date-create d1) + (org-reveal t)) (t (error "Invalid selection character `%c'" char))))) (defun org-agenda-add-entry-to-org-agenda-diary-file (type text &optional d1 d2) diff --git a/lisp/org-datetree.el b/lisp/org-datetree.el index a7b750f25..0ef725a74 100644 --- a/lisp/org-datetree.el +++ b/lisp/org-datetree.el @@ -33,11 +33,26 @@ (require 'org) +(defvar org-datetree-base-level 1 + "The level at which years should be placed in the date tree. +This is normally one, but if the buffer has an entry with a DATE_TREE +property, the date tree will become a subtree under that entry, so the +base level will be properly adjusted.") + (defun org-datetree-find-date-create (date) "Find or create an entry for DATE." (let ((year (nth 2 date)) (month (car date)) (day (nth 1 date))) + (org-set-local 'org-datetree-base-level 1) + (widen) + (goto-char (point-min)) + (when (re-search-forward "^[ \t]*:DATE_TREE:[ \t]+\\S-" nil t) + (org-back-to-heading t) + (org-set-local 'org-datetree-base-level + (org-get-valid-level (funcall outline-level) 1)) + (org-narrow-to-subtree)) + (goto-char (point-min)) (org-datetree-find-year-create year) (org-datetree-find-month-create year month) (org-datetree-find-day-create year month day) @@ -103,7 +118,7 @@ (let ((pos (point))) (skip-chars-backward " \t\n") (delete-region (point) pos) - (insert "\n* \n") + (insert "\n" (make-string org-datetree-base-level ?*) " \n") (backward-char 1) (if month (org-do-demote)) (if day (org-do-demote))