Browse Source

Implement including archives into agenda.

trees that are marked with the ARCHIVE tag and even archive files
can now temporarily be included into an agenda view.

Press `v' in the agenda to get trees with ARCHIVE tags.
Press `C-u v' to get archive files included.
Carsten Dominik 17 years ago
parent
commit
f41be4b87d
5 changed files with 109 additions and 42 deletions
  1. 10 1
      doc/org.texi
  2. 2 2
      doc/orgcard.tex
  3. 17 0
      lisp/ChangeLog
  4. 61 16
      lisp/org-agenda.el
  5. 19 23
      lisp/org.el

+ 10 - 1
doc/org.texi

@@ -1006,7 +1006,9 @@ archived subtrees are not exposed, unless you configure the option
 @item
 @item
 During agenda view construction (@pxref{Agenda Views}), the content of
 During agenda view construction (@pxref{Agenda Views}), the content of
 archived trees is ignored unless you configure the option
 archived trees is ignored unless you configure the option
-@code{org-agenda-skip-archived-trees}.
+@code{org-agenda-skip-archived-trees}, in which case these trees will always
+be included.  In the agenda you can press the @kbd{v} key to get archives
+temporarily included.
 @item
 @item
 Archived trees are not exported (@pxref{Exporting}), only the headline
 Archived trees are not exported (@pxref{Exporting}), only the headline
 is.  Configure the details using the variable
 is.  Configure the details using the variable
@@ -5692,6 +5694,13 @@ Toggle Logbook mode.  In Logbook mode, entries that where marked DONE while
 logging was on (variable @code{org-log-done}) are shown in the agenda,
 logging was on (variable @code{org-log-done}) are shown in the agenda,
 as are entries that have been clocked on that day.
 as are entries that have been clocked on that day.
 @c
 @c
+@kindex v
+@item v
+Toggle Archives mode.  In archives mode, trees that are marked are also
+scanned when producing the agenda.  When you call this command with a
+@kbd{C-u} prefix argument, even all archive files are included.  To exit
+archives mode, press @kbd{v} again.
+@c
 @kindex R
 @kindex R
 @item R
 @item R
 Toggle Clockreport mode.  In clockreport mode, the daily/weekly agenda will
 Toggle Clockreport mode.  In clockreport mode, the daily/weekly agenda will

+ 2 - 2
doc/orgcard.tex

@@ -635,10 +635,10 @@ after  ``{\tt :}'', and dictionary words elsewhere.
 \key{toggle inclusion of diary entries}{D}
 \key{toggle inclusion of diary entries}{D}
 \key{toggle time grid for daily schedule}{G}
 \key{toggle time grid for daily schedule}{G}
 \key{toggle display of logbook entries}{l}
 \key{toggle display of logbook entries}{l}
+\key{toggle inclusion of archived trees/files}{v / C-u v}
 \key{refresh agenda buffer with any changes}{r / g}
 \key{refresh agenda buffer with any changes}{r / g}
 \key{save all org-mode buffers}{s}
 \key{save all org-mode buffers}{s}
-\key{display the following \kbd{org-agenda-ndays}}{RIGHT}
-\key{display the previous \kbd{org-agenda-ndays}}{LEFT}
+\key{display next/previous day,week,...}{RIGHT/LEFT}
 \key{goto today}{.}
 \key{goto today}{.}
 
 
 {\bf Remote editing}
 {\bf Remote editing}

+ 17 - 0
lisp/ChangeLog

@@ -1,3 +1,20 @@
+2008-06-19  Carsten Dominik  <dominik@science.uva.nl>
+
+	* org.el (org-agenda-skip-archived-trees): Docstring now
+	discourages using this.
+	(org-scan-tags): Check for org-agenda-archives-mode.
+	(org-map-entries): Make sure org-agenda-archives-mode is nil.
+	(org-agenda-files): Functionality of second arg changed.
+
+	* org-agenda.el (org-agenda-archives-mode): New variable
+	(org-write-agenda, org-prepare-agenda, org-agenda-list)
+	(org-search-view, org-todo-list, org-tags-view)
+	(org-agenda-list-stuck-projects): Call `org-agenda-files' with
+	`ifmode' argument.
+	(org-agenda-quit): Reset the archives mode.
+	(org-agenda-archives-mode): New command.
+	(org-agenda-set-mode-name): Include archives info.
+
 2008-06-18  Carsten Dominik  <dominik@science.uva.nl>
 2008-06-18  Carsten Dominik  <dominik@science.uva.nl>
 
 
 	* org.el (org-paste-subtree): Make sure the yanked headline is
 	* org.el (org-paste-subtree): Make sure the yanked headline is

+ 61 - 16
lisp/org-agenda.el

@@ -392,6 +392,13 @@ or `C-c a #' to produce the list."
  :tag "Org Agenda Skip"
  :tag "Org Agenda Skip"
  :group 'org-agenda)
  :group 'org-agenda)
 
 
+(defvar org-agenda-archives-mode nil
+  "Non-nil means, the agenda will include archived items.
+If this is the symbol `trees', trees in the selected agenda scope
+that are marked with the ARCHIVE tag will be included anyway.  When this is
+t, also all archive files associated with the current selection of agenda
+files will be included.")
+
 (defcustom org-agenda-skip-comment-trees t
 (defcustom org-agenda-skip-comment-trees t
   "Non-nil means, skip trees that start with teh COMMENT keyword.
   "Non-nil means, skip trees that start with teh COMMENT keyword.
 When nil, these trees are also scand by agenda commands."
 When nil, these trees are also scand by agenda commands."
@@ -1105,6 +1112,7 @@ The following commands are available:
 (org-defkey org-agenda-mode-map "f" 'org-agenda-follow-mode)
 (org-defkey org-agenda-mode-map "f" 'org-agenda-follow-mode)
 (org-defkey org-agenda-mode-map "R" 'org-agenda-clockreport-mode)
 (org-defkey org-agenda-mode-map "R" 'org-agenda-clockreport-mode)
 (org-defkey org-agenda-mode-map "l" 'org-agenda-log-mode)
 (org-defkey org-agenda-mode-map "l" 'org-agenda-log-mode)
+(org-defkey org-agenda-mode-map "v" 'org-agenda-archives-mode)
 (org-defkey org-agenda-mode-map "D" 'org-agenda-toggle-diary)
 (org-defkey org-agenda-mode-map "D" 'org-agenda-toggle-diary)
 (org-defkey org-agenda-mode-map "G" 'org-agenda-toggle-time-grid)
 (org-defkey org-agenda-mode-map "G" 'org-agenda-toggle-time-grid)
 (org-defkey org-agenda-mode-map "r" 'org-agenda-redo)
 (org-defkey org-agenda-mode-map "r" 'org-agenda-redo)
@@ -1234,14 +1242,25 @@ The following commands are available:
      ["Year View" org-agenda-year-view :active (org-agenda-check-type nil 'agenda)
      ["Year View" org-agenda-year-view :active (org-agenda-check-type nil 'agenda)
       :style radio :selected (member org-agenda-ndays '(365 366))]
       :style radio :selected (member org-agenda-ndays '(365 366))]
      "--"
      "--"
-     ["Show Logbook entries" org-agenda-log-mode
-      :style toggle :selected org-agenda-show-log :active (org-agenda-check-type nil 'agenda 'timeline)]
-     ["Show clock report" org-agenda-clockreport-mode
-     :style toggle :selected org-agenda-clockreport-mode :active (org-agenda-check-type nil 'agenda)]
      ["Include Diary" org-agenda-toggle-diary
      ["Include Diary" org-agenda-toggle-diary
-      :style toggle :selected org-agenda-include-diary :active (org-agenda-check-type nil 'agenda)]
+      :style toggle :selected org-agenda-include-diary
+      :active (org-agenda-check-type nil 'agenda)]
      ["Use Time Grid" org-agenda-toggle-time-grid
      ["Use Time Grid" org-agenda-toggle-time-grid
-      :style toggle :selected org-agenda-use-time-grid :active (org-agenda-check-type nil 'agenda)])
+      :style toggle :selected org-agenda-use-time-grid
+      :active (org-agenda-check-type nil 'agenda)]
+     "--"
+     ["Show clock report" org-agenda-clockreport-mode
+      :style toggle :selected org-agenda-clockreport-mode
+      :active (org-agenda-check-type nil 'agenda)]
+    "--"
+     ["Show Logbook entries" org-agenda-log-mode
+      :style toggle :selected org-agenda-show-log
+      :active (org-agenda-check-type nil 'agenda 'timeline)]
+     ["Include archived trees" org-agenda-archives-mode 
+      :style toggle :selected org-agenda-archives-mode :active t]
+     ["Include archive files" (org-agenda-archives-mode t)
+      :style toggle :selected (eq org-agenda-archives-mode t) :active t
+      :keys "C-u v"])
     ["Write view to file" org-write-agenda t]
     ["Write view to file" org-write-agenda t]
     ["Rebuild buffer" org-agenda-redo t]
     ["Rebuild buffer" org-agenda-redo t]
     ["Save all Org-mode Buffers" org-save-all-org-buffers t]
     ["Save all Org-mode Buffers" org-save-all-org-buffers t]
@@ -1855,7 +1874,8 @@ higher priority settings."
 		   (org-agenda-collect-markers)))
 		   (org-agenda-collect-markers)))
 		 (org-icalendar-verify-function 'org-check-agenda-marker-table)
 		 (org-icalendar-verify-function 'org-check-agenda-marker-table)
 		 (org-combined-agenda-icalendar-file file))
 		 (org-combined-agenda-icalendar-file file))
-	     (apply 'org-export-icalendar 'combine (org-agenda-files))))
+	     (apply 'org-export-icalendar 'combine
+		    (org-agenda-files nil 'ifmode))))
 	  (t
 	  (t
 	   (let ((bs (buffer-string)))
 	   (let ((bs (buffer-string)))
 	     (find-file file)
 	     (find-file file)
@@ -1937,7 +1957,7 @@ higher priority settings."
     (org-agenda-reset-markers)
     (org-agenda-reset-markers)
     (setq org-agenda-contributing-files nil)
     (setq org-agenda-contributing-files nil)
     (setq org-agenda-columns-active nil)
     (setq org-agenda-columns-active nil)
-    (org-prepare-agenda-buffers (org-agenda-files))
+    (org-prepare-agenda-buffers (org-agenda-files nil 'ifmode))
     (setq org-todo-keywords-for-agenda
     (setq org-todo-keywords-for-agenda
 	  (org-uniquify org-todo-keywords-for-agenda))
 	  (org-uniquify org-todo-keywords-for-agenda))
     (setq org-done-keywords-for-agenda
     (setq org-done-keywords-for-agenda
@@ -2032,7 +2052,7 @@ it is through options in org-agenda-custom-commands.")
 Also moves point to the end of the skipped region, so that search can
 Also moves point to the end of the skipped region, so that search can
 continue from there."
 continue from there."
   (let ((p (point-at-bol)) to fp)
   (let ((p (point-at-bol)) to fp)
-    (and org-agenda-skip-archived-trees
+    (and org-agenda-skip-archived-trees (not org-agenda-archives-mode)
 	 (get-text-property p :org-archived)
 	 (get-text-property p :org-archived)
 	 (org-end-of-subtree t)
 	 (org-end-of-subtree t)
 	 (throw :skip t))
 	 (throw :skip t))
@@ -2255,7 +2275,7 @@ given in `org-agenda-start-on-weekday'."
   (let* ((org-agenda-start-on-weekday
   (let* ((org-agenda-start-on-weekday
 	  (if (or (equal ndays 7) (and (null ndays) (equal 7 org-agenda-ndays)))
 	  (if (or (equal ndays 7) (and (null ndays) (equal 7 org-agenda-ndays)))
 	      org-agenda-start-on-weekday nil))
 	      org-agenda-start-on-weekday nil))
-	 (thefiles (org-agenda-files))
+	 (thefiles (org-agenda-files nil 'ifmode))
 	 (files thefiles)
 	 (files thefiles)
 	 (today (time-to-days
 	 (today (time-to-days
 		 (time-subtract (current-time)
 		 (time-subtract (current-time)
@@ -2373,7 +2393,7 @@ given in `org-agenda-start-on-weekday'."
 	    (put-text-property s (1- (point)) 'day d)
 	    (put-text-property s (1- (point)) 'day d)
 	    (put-text-property s (1- (point)) 'org-day-cnt day-cnt))))
 	    (put-text-property s (1- (point)) 'org-day-cnt day-cnt))))
     (when (and org-agenda-clockreport-mode clocktable-start)
     (when (and org-agenda-clockreport-mode clocktable-start)
-      (let ((org-agenda-files (org-agenda-files))
+      (let ((org-agenda-files (org-agenda-files nil 'ifmode))
 	    ;; the above line is to ensure the restricted range!
 	    ;; the above line is to ensure the restricted range!
 	    (p org-agenda-clockreport-parameter-plist)
 	    (p org-agenda-clockreport-parameter-plist)
 	    tbl)
 	    tbl)
@@ -2502,7 +2522,7 @@ in `org-agenda-text-search-extra-files'."
       (setq regexp (pop regexps+))
       (setq regexp (pop regexps+))
       (if hdl-only (setq regexp (concat "^" org-outline-regexp ".*?"
       (if hdl-only (setq regexp (concat "^" org-outline-regexp ".*?"
 					regexp))))
 					regexp))))
-    (setq files (org-agenda-files))
+    (setq files (org-agenda-files nil 'ifmode))
     (when (eq (car org-agenda-text-search-extra-files) 'agenda-archives)
     (when (eq (car org-agenda-text-search-extra-files) 'agenda-archives)
       (pop org-agenda-text-search-extra-files)
       (pop org-agenda-text-search-extra-files)
       (setq files (org-add-archive-files files)))
       (setq files (org-add-archive-files files)))
@@ -2633,7 +2653,7 @@ for a keyword.  A numeric prefix directly selects the Nth keyword in
     (org-set-local 'org-last-arg arg)
     (org-set-local 'org-last-arg arg)
     (setq org-agenda-redo-command
     (setq org-agenda-redo-command
 	  '(org-todo-list (or current-prefix-arg org-last-arg)))
 	  '(org-todo-list (or current-prefix-arg org-last-arg)))
-    (setq files (org-agenda-files)
+    (setq files (org-agenda-files nil 'ifmode)
 	  rtnall nil)
 	  rtnall nil)
     (while (setq file (pop files))
     (while (setq file (pop files))
       (catch 'nextfile
       (catch 'nextfile
@@ -2690,7 +2710,7 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
     (setq org-agenda-redo-command
     (setq org-agenda-redo-command
 	  (list 'org-tags-view (list 'quote todo-only)
 	  (list 'org-tags-view (list 'quote todo-only)
 		(list 'if 'current-prefix-arg nil 'org-agenda-query-string)))
 		(list 'if 'current-prefix-arg nil 'org-agenda-query-string)))
-    (setq files (org-agenda-files)
+    (setq files (org-agenda-files nil 'ifmode)
 	  rtnall nil)
 	  rtnall nil)
     (while (setq file (pop files))
     (while (setq file (pop files))
       (catch 'nextfile
       (catch 'nextfile
@@ -2827,7 +2847,8 @@ MATCH is being ignored."
 	 (todo (nth 1 org-stuck-projects))
 	 (todo (nth 1 org-stuck-projects))
 	 (todo-wds (if (member "*" todo)
 	 (todo-wds (if (member "*" todo)
 		       (progn
 		       (progn
-			 (org-prepare-agenda-buffers (org-agenda-files))
+			 (org-prepare-agenda-buffers (org-agenda-files
+						      nil 'ifmode))
 			 (org-delete-all
 			 (org-delete-all
 			  org-done-keywords-for-agenda
 			  org-done-keywords-for-agenda
 			  (copy-sequence org-todo-keywords-for-agenda)))
 			  (copy-sequence org-todo-keywords-for-agenda)))
@@ -4002,7 +4023,8 @@ If ERROR is non-nil, throw an error, otherwise just return nil."
       (if (not (one-window-p)) (delete-window))
       (if (not (one-window-p)) (delete-window))
       (kill-buffer buf)
       (kill-buffer buf)
       (org-agenda-reset-markers)
       (org-agenda-reset-markers)
-      (org-columns-remove-overlays))
+      (org-columns-remove-overlays)
+      (setq org-agenda-archives-mode nil))
     ;; Maybe restore the pre-agenda window configuration.
     ;; Maybe restore the pre-agenda window configuration.
     (and org-agenda-restore-windows-after-quit
     (and org-agenda-restore-windows-after-quit
 	 (not (eq org-agenda-window-setup 'other-frame))
 	 (not (eq org-agenda-window-setup 'other-frame))
@@ -4340,6 +4362,24 @@ so that the date SD will be in that range."
   (message "Log mode is %s"
   (message "Log mode is %s"
 	   (if org-agenda-show-log "on" "off")))
 	   (if org-agenda-show-log "on" "off")))
 
 
+(defun org-agenda-archives-mode (&optional with-files)
+  "Toggle log mode in an agenda buffer."
+  (interactive "P")
+  (setq org-agenda-archives-mode
+	(if with-files t (if org-agenda-archives-mode nil 'trees)))
+  (org-agenda-set-mode-name)
+  (org-agenda-redo)
+  (message
+   "%s"
+   (cond
+    ((eq org-agenda-archives-mode nil)
+     "No archives are included")
+    ((eq org-agenda-archives-mode 'trees)
+     (format "Trees with :%s: tag are included" org-archive-tag))
+    ((eq org-agenda-archives-mode t)
+     (format "Trees with :%s: tag and all active archive files are included"
+	     org-archive-tag)))))
+
 (defun org-agenda-toggle-diary ()
 (defun org-agenda-toggle-diary ()
   "Toggle diary inclusion in an agenda buffer."
   "Toggle diary inclusion in an agenda buffer."
   (interactive)
   (interactive)
@@ -4370,6 +4410,11 @@ so that the date SD will be in that range."
 		(if org-agenda-include-diary   " Diary"  "")
 		(if org-agenda-include-diary   " Diary"  "")
 		(if org-agenda-use-time-grid   " Grid"   "")
 		(if org-agenda-use-time-grid   " Grid"   "")
 		(if org-agenda-show-log        " Log"    "")
 		(if org-agenda-show-log        " Log"    "")
+		(if org-agenda-archives-mode
+		    (if (eq org-agenda-archives-mode t)
+			" Archives"
+		      (format " :%s:" org-archive-tag))
+		  "")
 		(if org-agenda-clockreport-mode " Clock"   "")))
 		(if org-agenda-clockreport-mode " Clock"   "")))
   (force-mode-line-update))
   (force-mode-line-update))
 
 

+ 19 - 23
lisp/org.el

@@ -2573,7 +2573,9 @@ get the proper fontification."
 
 
 (defcustom org-agenda-skip-archived-trees t
 (defcustom org-agenda-skip-archived-trees t
   "Non-nil means, the agenda will skip any items located in archived trees.
   "Non-nil means, the agenda will skip any items located in archived trees.
-An archived tree is a tree marked with the tag ARCHIVE."
+An archived tree is a tree marked with the tag ARCHIVE.  The use of this
+variable is no longer recommended, you should leave it at the value t.
+Instead, use the key `v' to cycle the archives-mode in the agenda."
   :group 'org-archive
   :group 'org-archive
   :group 'org-agenda-skip
   :group 'org-agenda-skip
   :type 'boolean)
   :type 'boolean)
@@ -9207,6 +9209,7 @@ ACTION can be `set', `up', `down', or a character."
 
 
 ;;;; Tags
 ;;;; Tags
 
 
+(defvar org-agenda-archives-mode)
 (defun org-scan-tags (action matcher &optional todo-only)
 (defun org-scan-tags (action matcher &optional todo-only)
   "Scan headline tags with inheritance and produce output ACTION.
   "Scan headline tags with inheritance and produce output ACTION.
 
 
@@ -9276,8 +9279,11 @@ only lines with a TODO keyword are included in the output."
 		    (org-remove-uniherited-tags (cdar tags-alist))))
 		    (org-remove-uniherited-tags (cdar tags-alist))))
 	  (when (and (or (not todo-only) (member todo org-not-done-keywords))
 	  (when (and (or (not todo-only) (member todo org-not-done-keywords))
 		     (eval matcher)
 		     (eval matcher)
-		     (or (not org-agenda-skip-archived-trees)
-			 (not (member org-archive-tag tags-list))))
+		     (or
+		      (not (member org-archive-tag tags-list))
+		      ;; we have an archive tag, should we use this anyway?
+		      (or (not org-agenda-skip-archived-trees)
+			  (and (eq action 'agenda) org-agenda-archives-mode))))
 	    (unless (eq action 'sparse-tree) (org-agenda-skip))
 	    (unless (eq action 'sparse-tree) (org-agenda-skip))
 
 
 	    ;; select this headline
 	    ;; select this headline
@@ -10009,12 +10015,13 @@ the scanner.  The following items can be given here:
              the the function returns t, FUNC will not be called for that
              the the function returns t, FUNC will not be called for that
              entry and search will continue from the point where the
              entry and search will continue from the point where the
              function leaves it."
              function leaves it."
-  (let* ((org-agenda-skip-archived-trees (memq 'archive skip))
+  (let* ((org-agenda-archives-mode nil) ; just to make sure
+	 (org-agenda-skip-archived-trees (memq 'archive skip))
 	 (org-agenda-skip-comment-trees (memq 'comment skip))
 	 (org-agenda-skip-comment-trees (memq 'comment skip))
 	 (org-agenda-skip-function
 	 (org-agenda-skip-function
 	  (car (org-delete-all '(comment archive) skip)))
 	  (car (org-delete-all '(comment archive) skip)))
 	 (org-tags-match-list-sublevels t)
 	 (org-tags-match-list-sublevels t)
-	 matcher pos)
+	 matcher pos file)
 
 
     (cond
     (cond
      ((eq match t)   (setq matcher t))
      ((eq match t)   (setq matcher t))
@@ -11839,14 +11846,13 @@ If TMP is non-nil, don't include temporary buffers."
 	   (buffer-list)))
 	   (buffer-list)))
     (delete nil blist)))
     (delete nil blist)))
 
 
-(defun org-agenda-files (&optional unrestricted ext)
+(defun org-agenda-files (&optional unrestricted archives)
   "Get the list of agenda files.
   "Get the list of agenda files.
 Optional UNRESTRICTED means return the full list even if a restriction
 Optional UNRESTRICTED means return the full list even if a restriction
 is currently in place.
 is currently in place.
-When EXT is non-nil, try to add all files that are created by adding EXT
-to the file nemes.  Basically, this is a way to add the archive files
-to the list, by setting EXT to \"_archive\"  If EXT is non-nil, but not
-a string, \"_archive\" will be used."
+When ARCHIVES is t, include all archive files hat are really being
+used by the agenda files.  If ARCHIVE is `ifmode', do this only if
+`org-agenda-archives-mode' is t."
   (let ((files
   (let ((files
 	 (cond
 	 (cond
 	  ((and (not unrestricted) (get 'org-agenda-files 'org-restrict)))
 	  ((and (not unrestricted) (get 'org-agenda-files 'org-restrict)))
@@ -11866,16 +11872,9 @@ a string, \"_archive\" will be used."
 				 (lambda (file)
 				 (lambda (file)
 				   (and (file-readable-p file) file)))
 				   (and (file-readable-p file) file)))
 				files))))
 				files))))
-    (when ext
-      (setq ext (if (and (stringp ext) (string-match "\\S-" ext))
-		    ext "_archive"))
-      (setq files (apply 'append
-			 (mapcar
-			  (lambda (f)
-			    (if (file-exists-p (concat f ext))
-				(list f (concat f ext))
-			      (list f)))
-			  files))))
+    (when (or (eq archives t)
+	      (and (eq archives 'ifmode) (eq org-agenda-archives-mode t)))
+      (setq files (org-add-archive-files files)))
     files))
     files))
 
 
 (defun org-edit-agenda-file-list ()
 (defun org-edit-agenda-file-list ()
@@ -13231,9 +13230,6 @@ See the individual commands for more information."
      ["Cycling opens ARCHIVE trees"
      ["Cycling opens ARCHIVE trees"
       (setq org-cycle-open-archived-trees (not org-cycle-open-archived-trees))
       (setq org-cycle-open-archived-trees (not org-cycle-open-archived-trees))
       :style toggle :selected org-cycle-open-archived-trees]
       :style toggle :selected org-cycle-open-archived-trees]
-     ["Agenda includes ARCHIVE trees"
-      (setq org-agenda-skip-archived-trees (not org-agenda-skip-archived-trees))
-      :style toggle :selected (not org-agenda-skip-archived-trees)]
      "--"
      "--"
      ["Move Subtree to Archive" org-advertized-archive-subtree t]
      ["Move Subtree to Archive" org-advertized-archive-subtree t]
  ;    ["Check and Move Children" (org-archive-subtree '(4))
  ;    ["Check and Move Children" (org-archive-subtree '(4))