Browse Source

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.
Bastien 5 years ago
parent
commit
3d0282ef87
4 changed files with 57 additions and 15 deletions
  1. 4 0
      doc/org-manual.org
  2. 32 14
      etc/ORG-NEWS
  3. 2 1
      lisp/org-agenda.el
  4. 19 0
      lisp/org-archive.el

+ 4 - 0
doc/org-manual.org

@@ -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.

+ 32 - 14
etc/ORG-NEWS

@@ -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,14 +73,20 @@ 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-show-notification-timeout~
+*** New option ~org-archive-subtree-save-file-p~
 
 
-This option will add a timeout to notifications.
+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.
 
 
-*** Babel: new header argument to pass Java command line arguments
+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=.
 
 
-Babel Java blocks recognize header argument =:cmdargs= and pass its
-value in call to =java=.
+*** New option ~org-show-notification-timeout~
+
+This option will add a timeout to notifications.
 
 
 ** 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~

+ 2 - 1
lisp/org-agenda.el

@@ -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)

+ 19 - 0
lisp/org-archive.el

@@ -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