New option `org-archive-subtree-save-file-p'

* lisp/org-agenda.el (org-agenda-archive-with): Bind
`org-archive-from-agenda' to `t' when archiving from agenda.

* lisp/org-archive.el (org-archive-subtree-save-file-p): New option.
(org-archive-subtree): Use the new option.

* doc/org-manual.org (Moving a tree to an archive file):
Mention the new option.

Thanks to Russ Allbery for suggesting a similar idea.
This commit is contained in:
Bastien 2020-01-31 10:42:40 +01:00
parent c9d2f12094
commit 3d0282ef87
4 changed files with 57 additions and 15 deletions

View File

@ -7209,6 +7209,10 @@ came, its outline path the archiving time etc. Configure the variable
~org-archive-save-context-info~ to adjust the amount of information ~org-archive-save-context-info~ to adjust the amount of information
added. added.
#+vindex: org-archive-subtree-save-file-p
When ~org-archive-subtree-save-file-p~ is non-~nil~, save the target
archive buffer.
*** Internal archiving *** Internal archiving
:PROPERTIES: :PROPERTIES:
:DESCRIPTION: Switch off a tree but keep it in the file. :DESCRIPTION: Switch off a tree but keep it in the file.

View File

@ -32,7 +32,7 @@ window header line when this first row is not visible anymore in the
buffer. buffer.
You can activate this minor mode by default by setting the option You can activate this minor mode by default by setting the option
~org-table-electric-header-p~ to ~t~. ~org-table-electric-header-p~ to =t=.
*** Property drawers allowed before first headline *** Property drawers allowed before first headline
@ -44,16 +44,28 @@ properties will work also for this level. In other words: defining
things in a property drawer before the first headline will make them things in a property drawer before the first headline will make them
"inheritable" for all headlines. "inheritable" for all headlines.
*** New option to group captured datetime entries by month
A new `:tree-type month' option was added to org-capture-templates to
group new datetime entries by month.
*** Refinement in window behavior on exiting Org source buffer *** Refinement in window behavior on exiting Org source buffer
After editing a source block, Org will restore the window layout when After editing a source block, Org will restore the window layout when
~org-src-window-setup~ is set to a value that modifies the layout. ~org-src-window-setup~ is set to a value that modifies the layout.
*** Babel: new header argument to pass Java command line arguments
Babel Java blocks recognize header argument =:cmdargs= and pass its
value in call to =java=.
** New options
*** New option ~org-table-electric-header-p~
Setting this option to =t= will activate
~org-table-electric-header-mode~ in org-mode buffers.
*** New option to group captured datetime entries by month
A new `:tree-type month' option was added to org-capture-templates to
group new datetime entries by month.
*** New option to show source buffers using "plain" display-buffer *** New option to show source buffers using "plain" display-buffer
Added option ~plain~ to ~org-src-window-setup~ to show source buffers Added option ~plain~ to ~org-src-window-setup~ to show source buffers
@ -61,15 +73,21 @@ using ~display-buffer~. This allows users to control how source
buffers are displayed by modifying ~display-buffer-alist~ or buffers are displayed by modifying ~display-buffer-alist~ or
~display-buffer-base-action~. ~display-buffer-base-action~.
*** New option ~org-archive-subtree-save-file-p~
Archiving a subtree used to always save the target archive buffer.
Commit [[https://code.orgmode.org/bzg/org-mode/commit/b186d1d7][b186d1d7]] changed this behavior by always not saving the target
buffer, because batch archiving from agenda could take too much time.
This new option ~org-archive-subtree-save-file-p~ defaults to the
value =from-org= so that archiving a subtree will save the target
buffer when done from an org-mode buffer, but not from the agenda.
You can also set this option to =t= or to =from-agenda=.
*** New option ~org-show-notification-timeout~ *** New option ~org-show-notification-timeout~
This option will add a timeout to notifications. This option will add a timeout to notifications.
*** Babel: new header argument to pass Java command line arguments
Babel Java blocks recognize header argument =:cmdargs= and pass its
value in call to =java=.
** New commands ** New commands
*** ~org-table-electric-header-mode~ *** ~org-table-electric-header-mode~
@ -1392,9 +1410,9 @@ removed from Gnus circa September 2010.
*** ~org-agenda-repeating-timestamp-show-all~ is removed. *** ~org-agenda-repeating-timestamp-show-all~ is removed.
For an equivalent to a ~nil~ value, set For an equivalent to a =nil= value, set
~org-agenda-show-future-repeats~ to nil and ~org-agenda-show-future-repeats~ to nil and
~org-agenda-prefer-last-repeat~ to ~t~. ~org-agenda-prefer-last-repeat~ to =t=.
*** ~org-gnus-nnimap-query-article-no-from-file~ is removed. *** ~org-gnus-nnimap-query-article-no-from-file~ is removed.
@ -1412,7 +1430,7 @@ equivalent to the removed format string.
*** ~org-enable-table-editor~ is removed. *** ~org-enable-table-editor~ is removed.
Setting it to a ~nil~ value broke some other features (e.g., speed Setting it to a =nil= value broke some other features (e.g., speed
keys). keys).
*** ~org-export-use-babel~ cannot be set to ~inline-only~ *** ~org-export-use-babel~ cannot be set to ~inline-only~

View File

@ -8810,7 +8810,8 @@ Point is in the buffer where the item originated.")
(let ((org-agenda-buffer-name bufname-orig)) (let ((org-agenda-buffer-name bufname-orig))
(org-remove-subtree-entries-from-agenda)) (org-remove-subtree-entries-from-agenda))
(org-back-to-heading t) (org-back-to-heading t)
(funcall cmd))) (let ((org-archive-from-agenda t))
(funcall cmd))))
(error "Archiving works only in Org files")))))) (error "Archiving works only in Org files"))))))
(defun org-remove-subtree-entries-from-agenda (&optional buf beg end) (defun org-remove-subtree-entries-from-agenda (&optional buf beg end)

View File

@ -91,6 +91,15 @@ When a string, a %s formatter will be replaced by the file name."
(const :tag "When archiving a subtree to the same file" infile) (const :tag "When archiving a subtree to the same file" infile)
(const :tag "Always" t))) (const :tag "Always" t)))
(defcustom org-archive-subtree-save-file-p 'from-org
"Non-nil means save the archive file after archiving a subtree."
:group 'org-archive
:type '(choice
(const :tag "Always save the archive buffer" t)
(const :tag "Save target buffer when archiving from an agenda view" from-agenda)
(const :tag "Save target buffer when archiving from an org buffer" from-org)
(const :tag "Do not save the archive buffer")))
(defcustom org-archive-save-context-info '(time file olpath category todo itags) (defcustom org-archive-save-context-info '(time file olpath category todo itags)
"Parts of context info that should be stored as properties when archiving. "Parts of context info that should be stored as properties when archiving.
When a subtree is moved to an archive file, it loses information given by When a subtree is moved to an archive file, it loses information given by
@ -361,6 +370,16 @@ direct children of this heading."
(point) (point)
(concat "ARCHIVE_" (upcase (symbol-name item))) (concat "ARCHIVE_" (upcase (symbol-name item)))
value)))) value))))
;; Save and kill the buffer, if it is not the same
;; buffer and depending on `org-archive-subtree-save-file-p'
(unless (eq this-buffer buffer)
(when (or (eq org-archive-subtree-save-file-p t)
(and (boundp 'org-archive-from-agenda)
(eq org-archive-subtree-save-file-p 'from-agenda)))
(save-buffer)))
;; (unless (or (not org-archive-subtree-save-file-p)
;; (eq this-buffer buffer))
;; (save-buffer))
(widen)))) (widen))))
;; Here we are back in the original buffer. Everything seems ;; Here we are back in the original buffer. Everything seems
;; to have worked. So now run hooks, cut the tree and finish ;; to have worked. So now run hooks, cut the tree and finish