Re: [O] [PATCH] Update statistic cookies when archiving
Hello, Jay Kamatwrites: > Done. Applied. Thank you! > > I'm not sure if I did the tests 'correctly' though. I placed them in > test-org-element.el since there was a little bit of archive based > testing there, is there a better place to put them? I couldn't find any > file for org-archive testing. Maybe I'll write some more archive tests > later... I created test-org-archive.el on your behalf. Regards, -- Nicolas Goaziou0x80A93738
Re: [O] [PATCH] Update statistic cookies when archiving
Hi, > Be warned that we're in a feature-freeze phase. It will have to wait for > Org 9.1 before being merged. Sounds good to me! > >> +;; Go to parent, even if no children exist > > Nitpick: Missing final dot. > >> +(org-up-heading-safe) >> +;; Update cookie of parent > > Ditto. >> +(org-update-statistics-cookies nil))) >> (message "Subtree archived %s" >> (if (eq this-buffer buffer) >> (concat "under heading: " heading) >> @@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node >> property." >> (outline-hide-subtree) >> (org-cycle-show-empty-lines 'folded) >> (goto-char pos))) >> +(when org-provide-todo-statistics >> + ;; update todo statistics of parent > > Ditto. Missing capital, too. > >> + (org-update-parent-todo-statistics)) >> (org-reveal) >> (if (looking-at "^[ \t]*$") >> (outline-next-visible-heading 1 Fixed. > Could you provide some tests and an ORG-NEWS entry? For the latter, you > can start a new "Version 9.2" top heading. Done. I'm not sure if I did the tests 'correctly' though. I placed them in test-org-element.el since there was a little bit of archive based testing there, is there a better place to put them? I couldn't find any file for org-archive testing. Maybe I'll write some more archive tests later... +(should (string= + (org-element-property :title (org-element-at-point)) + "Top [0%]"))) Is there a better way to extract the status cookie percentage from the header? I couldn't find anything in (org-element-property)'s output. Thanks, -Jay >From 612d4daac54e12556333fcd2e07771aa8344c86c Mon Sep 17 00:00:00 2001 From: Jay KamatDate: Sat, 2 Sep 2017 15:57:36 -0400 Subject: [PATCH] org-archive.el: Update statistic cookies when archiving * lisp/org-archive.el (org-archive-subtree): Update todo statistics when calling `org-archive-subtree'. (org-archive-to-archive-sibling): Update cookie statistics when calling `org-archive-to-archive-sibling'. This can be disabled by setting `org-provide-todo-statistics' to nil. --- etc/ORG-NEWS | 22 ++ lisp/org-archive.el | 9 + testing/lisp/test-org-element.el | 33 + 3 files changed, 64 insertions(+) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 9f3e62406..316a75f2f 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -8,6 +8,28 @@ See the end of the file for license conditions. Please send Org bug reports to mailto:emacs-orgmode@gnu.org. +* Version 9.2 + +** Incompatible changes +** New features +*** ~org-archive~ functions update status cookies + +Archiving headers through ~org-archive-subtree~ and +~org-archive-to-archive-sibling~ such as the ones listed below: + +#+BEGIN_SRC org + ,* Top [1/2] + ,** DONE Completed + ,** TODO Working +#+END_SRC + +Will update the status cookie in the top level header. + +** Removed functions +** Removed options +** New functions +** Miscellaneous + * Version 9.1 ** Incompatible changes diff --git a/lisp/org-archive.el b/lisp/org-archive.el index adb922e75..9ba73a8de 100644 --- a/lisp/org-archive.el +++ b/lisp/org-archive.el @@ -393,6 +393,12 @@ direct children of this heading." (when (featurep 'org-inlinetask) (org-inlinetask-remove-END-maybe)) (setq org-markers-to-move nil) + (when org-provide-todo-statistics + (save-excursion + ;; Go to parent, even if no children exist. + (org-up-heading-safe) + ;; Update cookie of parent. + (org-update-statistics-cookies nil))) (message "Subtree archived %s" (if (eq this-buffer buffer) (concat "under heading: " heading) @@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node property." (outline-hide-subtree) (org-cycle-show-empty-lines 'folded) (goto-char pos))) +(when org-provide-todo-statistics + ;; Update todo statistics of parent. + (org-update-parent-todo-statistics)) (org-reveal) (if (looking-at "^[ \t]*$") (outline-next-visible-heading 1 diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 7d1c55f36..e9506d2b0 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1070,6 +1070,39 @@ Some other text (let ((org-archive-tag "Archive")) (org-element-property :archivedp (org-element-at-point)) +(ert-deftest test-org-element/archive-update-status-cookie () + "Test archiving properly updating status cookies." + ;; Test org-archive-subtree with two children. + (org-test-with-temp-text-in-file "* Top [%]\n** DONE One\n** TODO Two" +(forward-line 1) +(org-archive-subtree) +(forward-line -1) +(should (string= + (org-element-property :title (org-element-at-point)) + "Top [0%]"))) + ;; Test org-archive-subtree with one child. + (org-test-with-temp-text-in-file "* Top [%]\n** TODO
Re: [O] [PATCH] Update statistic cookies when archiving
Hello, Jay Kamatwrites: > Sorry, forgot to actually attach the patch, here it is. > > From 95cdfa8c3ec81b3a0763b68044611c10a4dadc29 Mon Sep 17 00:00:00 2001 > From: Jay Kamat > Date: Sat, 2 Sep 2017 15:57:36 -0400 > Subject: [PATCH] org-archive.el: Update statistic cookies when > archiving Thank you! Be warned that we're in a feature-freeze phase. It will have to wait for Org 9.1 before being merged. > + ;; Go to parent, even if no children exist Nitpick: Missing final dot. > + (org-up-heading-safe) > + ;; Update cookie of parent Ditto. > + (org-update-statistics-cookies nil))) > (message "Subtree archived %s" >(if (eq this-buffer buffer) >(concat "under heading: " heading) > @@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node > property." > (outline-hide-subtree) > (org-cycle-show-empty-lines 'folded) > (goto-char pos))) > +(when org-provide-todo-statistics > + ;; update todo statistics of parent Ditto. Missing capital, too. > + (org-update-parent-todo-statistics)) > (org-reveal) > (if (looking-at "^[ \t]*$") > (outline-next-visible-heading 1 Could you provide some tests and an ORG-NEWS entry? For the latter, you can start a new "Version 9.2" top heading. Regards, -- Nicolas Goaziou
Re: [O] [PATCH] Update statistic cookies when archiving
Sorry, forgot to actually attach the patch, here it is. >From 95cdfa8c3ec81b3a0763b68044611c10a4dadc29 Mon Sep 17 00:00:00 2001 From: Jay KamatDate: Sat, 2 Sep 2017 15:57:36 -0400 Subject: [PATCH] org-archive.el: Update statistic cookies when archiving * lisp/org-archive.el (org-archive-subtree): Update todo statistics when calling `org-archive-subtree'. (org-archive-to-archive-sibling): Update cookie statistics when calling `org-archive-to-archive-sibling'. This can be disabled by setting `org-provide-todo-statistics' to nil. --- lisp/org-archive.el | 9 + 1 file changed, 9 insertions(+) diff --git a/lisp/org-archive.el b/lisp/org-archive.el index adb922e75..9c24d356c 100644 --- a/lisp/org-archive.el +++ b/lisp/org-archive.el @@ -393,6 +393,12 @@ direct children of this heading." (when (featurep 'org-inlinetask) (org-inlinetask-remove-END-maybe)) (setq org-markers-to-move nil) + (when org-provide-todo-statistics + (save-excursion + ;; Go to parent, even if no children exist + (org-up-heading-safe) + ;; Update cookie of parent + (org-update-statistics-cookies nil))) (message "Subtree archived %s" (if (eq this-buffer buffer) (concat "under heading: " heading) @@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node property." (outline-hide-subtree) (org-cycle-show-empty-lines 'folded) (goto-char pos))) +(when org-provide-todo-statistics + ;; update todo statistics of parent + (org-update-parent-todo-statistics)) (org-reveal) (if (looking-at "^[ \t]*$") (outline-next-visible-heading 1 -- 2.11.0 Jay Kamat writes: > Hi, > > Currently, statistic cookies do not update when archiving headings. For > example, when archiving the 'Two' header in the below example: > > * Top [50%] > ** TODO One > ** DONE Two > > The status cookie on 'Top' does not get set to [100%]. > > I have attached a draft patch to add support for this. However, I think > it needs a little bit more work. > > There are 3 archive methods, org-archive-subtree, > org-archive-to-archive-sibling, and org-archive-set-tag. > > For org-archive-set-tag, setting the :ARCHIVE: tag does not seem to > affect the status cookie, so I did not touch that. > > For org-archive-to-archive-sibling, I used the > (org-update-parent-todo-statistics) function, which seems to work as > expected. > > For org-archive-subtree, the solution I came up with is a little more > complicated, to handle the edge case of archiving the last child > header. In this case, 'parent' refers to the wrong (or non-existent) > header, so I use a small function to call (org-up-heading-safe) on one > header above point, which seems to work even for this edge case. I'm not > entirely sure if it's the proper solution though. > > Let me know if you have any feedback! > > -Jay
[O] [PATCH] Update statistic cookies when archiving
Hi, Currently, statistic cookies do not update when archiving headings. For example, when archiving the 'Two' header in the below example: * Top [50%] ** TODO One ** DONE Two The status cookie on 'Top' does not get set to [100%]. I have attached a draft patch to add support for this. However, I think it needs a little bit more work. There are 3 archive methods, org-archive-subtree, org-archive-to-archive-sibling, and org-archive-set-tag. For org-archive-set-tag, setting the :ARCHIVE: tag does not seem to affect the status cookie, so I did not touch that. For org-archive-to-archive-sibling, I used the (org-update-parent-todo-statistics) function, which seems to work as expected. For org-archive-subtree, the solution I came up with is a little more complicated, to handle the edge case of archiving the last child header. In this case, 'parent' refers to the wrong (or non-existent) header, so I use a small function to call (org-up-heading-safe) on one header above point, which seems to work even for this edge case. I'm not entirely sure if it's the proper solution though. Let me know if you have any feedback! -Jay