From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jay Kamat Subject: Re: [PATCH] Update statistic cookies when archiving Date: Sun, 03 Sep 2017 12:28:39 -0400 Message-ID: <87wp5fzqyw.fsf@gmail.com> References: <87r2voyi9z.fsf@gmail.com> <87mv6cyi6z.fsf@gmail.com> <87inh0mcql.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:39005) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1doXlP-0001Ct-N4 for emacs-orgmode@gnu.org; Sun, 03 Sep 2017 12:28:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1doXlK-0007l6-Nq for emacs-orgmode@gnu.org; Sun, 03 Sep 2017 12:28:47 -0400 Received: from mail-yw0-x231.google.com ([2607:f8b0:4002:c05::231]:35601) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1doXlK-0007kj-Gs for emacs-orgmode@gnu.org; Sun, 03 Sep 2017 12:28:42 -0400 Received: by mail-yw0-x231.google.com with SMTP id s187so17051659ywf.2 for ; Sun, 03 Sep 2017 09:28:42 -0700 (PDT) In-Reply-To: <87inh0mcql.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Sun, 03 Sep 2017 10:02:10 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Nicolas Goaziou Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain 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 --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-org-archive.el-Update-statistic-cookies-when-archivi.patch >From 612d4daac54e12556333fcd2e07771aa8344c86c 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 * 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 Two" + (forward-line 1) + (org-archive-subtree) + (forward-line -1) + (should (string= + (org-element-property :title (org-element-at-point)) + "Top [100%]"))) + ;; Test org-archive-to-archive-sibling with two children. + (org-test-with-temp-text "* Top [%]\n** TODO One\n** DONE Two" + (org-archive-to-archive-sibling) + (forward-line -1) + (should (string= + (org-element-property :title (org-element-at-point)) + "Top [100%]"))) + ;; Test org-archive-to-archive-sibling with two children. + (org-test-with-temp-text "* Top [%]\n** DONE Two" + (org-archive-to-archive-sibling) + (forward-line -1) + (should (string= + (org-element-property :title (org-element-at-point)) + "Top [0%]")))) + (ert-deftest test-org-element/headline-properties () "Test properties from property drawer." ;; All properties from property drawer have their symbol upper -- 2.11.0 --=-=-=--