emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [PATCH] Add the ability to archive to the datetree.


From: Bernt Hansen
Subject: Re: [O] [PATCH] Add the ability to archive to the datetree.
Date: Wed, 09 Nov 2011 06:22:47 -0500
User-agent: Gnus/5.110018 (No Gnus v0.18) Emacs/23.2 (gnu/linux)

Hi Andrew,

I'm just eyeballing your patch and there's a typo in your last hunk -
see comment inline.

Don't you also need to update the texinfo documentation for this
enhancement?

-Bernt

Andrew Hyatt <address@hidden> writes:

> * org.el (org-archive-location): Add documentation on new datetree
> option.
> * org-archive.el (org-archive-subtree): Add special handling
> of datetree options to archive to datetree.
>
> ---
>  lisp/org-archive.el |   21 +++++++++++++++++----
>  lisp/org.el         |    7 +++++++
>  2 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/lisp/org-archive.el b/lisp/org-archive.el
> index 16c35cf..4df6f1e 100644
> --- a/lisp/org-archive.el
> +++ b/lisp/org-archive.el
> @@ -213,13 +213,14 @@ this heading."
>                (current-time)))
>         category todo priority ltags itags atags
>         ;; end of variables that will be used for saving context
> -       location afile heading buffer level newfile-p infile-p visiting)
> +       location afile heading buffer level newfile-p infile-p visiting
> +       datetree-date)
>
>        ;; Find the local archive location
>        (setq location (org-get-local-archive-location)
>           afile (org-extract-archive-file location)
>           heading (org-extract-archive-heading location)
> -         infile-p (equal file (abbreviate-file-name afile)))
> +         infile-p (equal file (abbreviate-file-name (or afile ""))))
>        (unless afile
>       (error "Invalid `org-archive-location'"))
>
> @@ -230,6 +231,12 @@ this heading."
>       (setq buffer (current-buffer)))
>        (unless buffer
>       (error "Cannot access file \"%s\"" afile))
> +      (when (string-match "\\`datetree/" heading)
> +     ;; Replace with ***, to represent the 3 levels of headings the
> +     ;; datetree has.
> +     (setq heading (string-replace-match "\\`datetree/" heading "***"))
> +     (setq datetree-date (org-date-to-gregorian
> +                          (or (org-entry-get nil "CLOSED" t) time))))
>        (if (and (> (length heading) 0)
>              (string-match "^\\*+" heading))
>         (setq level (match-end 0))
> @@ -262,6 +269,9 @@ this heading."
>         (goto-char (point-max))
>         (insert (format "\nArchived entries from file %s\n\n"
>                         (buffer-file-name this-buffer))))
> +     (when datetree-date
> +       (org-datetree-find-date-create datetree-date)
> +       (org-narrow-to-subtree))
>       ;; Force the TODO keywords of the original buffer
>       (let ((org-todo-line-regexp tr-org-todo-line-regexp)
>             (org-todo-keywords-1 tr-org-todo-keywords-1)
> @@ -285,7 +295,8 @@ this heading."
>                 ;; Heading not found, just insert it at the end
>                 (goto-char (point-max))
>                 (or (bolp) (insert "\n"))
> -               (insert "\n" heading "\n")
> +               ;; datetrees don't need to much spacing
> +               (if datetree-date (insert heading) (insert "\n" heading "\n"))
>                 (end-of-line 0))
>               ;; Make the subtree visible
>               (show-subtree)
> @@ -296,7 +307,8 @@ this heading."
>                 (org-end-of-subtree t))
>               (skip-chars-backward " \t\r\n")
>               (and (looking-at "[ \t\r\n]*")
> -                  (replace-match "\n\n")))
> +                  ;; datetree archives don't need so much spacing.
> +                  (replace-match (if datetree-date "\n" "\n\n"))))
>           ;; No specific heading, just go to end of file.
>           (goto-char (point-max)) (insert "\n"))
>         ;; Paste
> @@ -326,6 +338,7 @@ this heading."
>                 (setq n (concat "ARCHIVE_" (upcase (symbol-name e))))
>                 (org-entry-put (point) n v)))))
>
> +       (widen)
>         ;; Save and kill the buffer, if it is not the same buffer.
>         (when (not (eq this-buffer buffer))
>           (save-buffer))))
> diff --git a/lisp/org.el b/lisp/org.el
> index 6ee3b4e..9c80c9c 100644
> --- a/lisp/org.el
> +++ b/lisp/org.el
> @@ -4046,6 +4046,13 @@ Here are a few examples:
>       Archive in file ./basement (relative path), as level 3 trees
>       below the level 2 heading \"** Finished Tasks\".
>
> +\"~/org/datetree.org::datetree/* Finished Tasks\"
> +        The \"datetree/\" string is special, signifiying to
                                                ^^^^^^^^^^^
Typo here                                       signifying

> +        archive items to the datetree.  Items are placed in
> +        either the CLOSED date of the item, or the current date
> +        if there is no CLOSED date.  The heading will be a
> +        subentry to the current date.
> +
>  You may set this option on a per-file basis by adding to the buffer a
>  line like



reply via email to

[Prev in Thread] Current Thread [Next in Thread]