Aaron Ecay writes: > Hi Eric, > > Looks like a sensible feature. One comment: > > 2014ko urriak 12an, Eric Abrahamsen-ek idatzi zuen: >> >> I think it would be useful to have a hook that runs before archiving a >> subtree. I'm attaching two patches: one that includes a hook in the >> archive process, and another (by way of an example) that adds a function >> to that hook for the org-attach library. You can set the option >> `org-attach-archive-delete' to a non-nil value to have org-attach delete >> a subtree's attachments when you archive it. >> >> Let me know what you think! >> >> Eric >> >> From 1bfc84570f29dd884c2759dfe19116f09228ed4e Mon Sep 17 00:00:00 2001 >> From: Eric Abrahamsen >> Date: Sun, 12 Oct 2014 22:01:29 +0800 >> Subject: [PATCH 2/3] Provide a hook during the archive process >> >> * lisp/org-archive.el (org-archive-hook): New hook. >> (org-archive-subtree): Run hook. >> --- >> lisp/org-archive.el | 13 +++++++++++-- >> 1 file changed, 11 insertions(+), 2 deletions(-) >> >> diff --git a/lisp/org-archive.el b/lisp/org-archive.el >> index 700e59b..c7f02b9 100644 >> --- a/lisp/org-archive.el >> +++ b/lisp/org-archive.el >> @@ -119,6 +119,13 @@ information." >> (const :tag "Outline path" olpath) >> (const :tag "Local tags" ltags))) >> >> +(defvar org-archive-hook nil >> + "Hook run after successfully archiving a subtree. >> + >> +Hook functions are called with point on the subtree in the >> +original file. At this stage, the subtree has been added to the >> +archive location, but not yet deleted from the original file.") >> + >> (defun org-get-local-archive-location () >> "Get the archive location applicable at point." >> (let ((re "^[ \t]*#\\+ARCHIVE:[ \t]+\\(\\S-.*\\S-\\)[ \t]*$") >> @@ -366,8 +373,10 @@ this heading." >> ;; Save and kill the buffer, if it is not the same buffer. >> (when (not (eq this-buffer buffer)) >> (save-buffer)))) >> - ;; Here we are back in the original buffer. Everything seems to have >> - ;; worked. So now cut the tree and finish up. >> + ;; Here we are back in the original buffer. Everything seems >> + ;; to have worked. So now run hooks, cut the tree and finish >> + ;; up. >> + (run-hooks 'org-archive-hook) >> (let (this-command) (org-cut-subtree)) >> (when (featurep 'org-inlinetask) >> (org-inlinetask-remove-END-maybe)) > > Can the above inlinetask thing also be moved into the hook? That > seems cleaner, and gives another demonstration of the usefulness of > the feature. Here's a patch that does it, though I'm a little more cautious about this since I only did a minimal test. Two things that worry me: 1) why is it called "remove-END-maybe" when it appears to remove the whole inlinetask, and 2) it its original habitat in org-attach, it came after the call to org-cut-subtree, meaning that it couldn't have operated on the subtree to be archived at all! Or am I misunderstanding something? I tried it on a test subtree, and the org-cut-subtree took out the included inlinetask as well. Anyway, it's a little mysterious, and I'm less confident about this bit.