emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] org-clock.el: clocktable ':formula %' now includes per-file time


From: Alan D. Salewski
Subject: [PATCH] org-clock.el: clocktable ':formula %' now includes per-file time pct
Date: Sun, 31 Jan 2021 16:49:35 -0500
User-agent: Cyrus-JMAP/3.5.0-alpha0-84-gfc141fe8b8-fm-20210125.001-gfc141fe8

* lisp/org-clock.el (org-clocktable-write-default): When ':formula %'
  is in-effect, show the per-file time percentage in the '%' column.

This change only has an effect when multiple files are contributing
to a given clocktable (such as when ':scope agenda' has been
specified).  The existing behavior is that such tables have an extra
'File' column, and each individual file that contributes has its own
summary line with the headline value '*File time*'.  Those summary
rows also produce a rollup time value for the file in the 'Time'
column.

Prior to this change, the built-in '%' formula does not produce a
calculation for those per-file times in the '%' column (the relevant
cells in the '%' column were blank).  With this change, the
percentage contribution of each individual file time to the total
time is shown.

The more agenda files you have, the more useful this behavior
becomes.

TINYCHANGE

Signed-off-by: Alan D. Salewski <ads@salewski.email>
---
 lisp/org-clock.el | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index cfd112ec3..8e91609c2 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -2697,7 +2697,18 @@ from the dynamic block definition."
             (format (concat "| %s %s | %s%s%s"
                             (format org-clock-file-time-cell-format
                                     (org-clock--translate "File time" lang))
-                            " | *%s*|\n")
+
+                            ;; The file-time rollup value goes in the first 
time
+                            ;; column (of which there is always at least 
one)...
+                            " | *%s*|"
+                            ;; ...and the remaining file time cols (if any) 
are blank.
+                            (make-string (max 0 (1- time-columns)) ?|)
+
+                            ;; Optionally show the percentage contribution of 
"this"
+                            ;; file time to the total time.
+                            (if (eq formula '%) " %s |" "")
+                            "\n")
+
                     (file-name-nondirectory file-name)
                     (if level?    "| " "") ;level column, maybe
                     (if timestamp "| " "") ;timestamp column, maybe
@@ -2705,7 +2716,12 @@ from the dynamic block definition."
                     (if properties         ;properties columns, maybe
                         (make-string (length properties) ?|)
                       "")
-                    (org-duration-from-minutes file-time)))) ;time
+                    (org-duration-from-minutes file-time) ;time
+
+                    (cond ((not (eq formula '%)) "")      ;time percentage, 
maybe
+                          ((or (not total-time) (= total-time 0)) "0.0")
+                          (t
+                           (format "%.1f" (* 100 (/ file-time (float 
total-time)))))))))
 
          ;; Get the list of node entries and iterate over it
          (when (> maxlevel 0)
-- 
a l a n   d.   s a l e w s k i
ads@salewski.email
salewski@att.net
https://github.com/salewski



reply via email to

[Prev in Thread] Current Thread [Next in Thread]