From: "Alan D. Salewski" <ads@salewski.email> To: emacs-orgmode@gnu.org Cc: "Alan D. Salewski" <salewski@att.net> Subject: [PATCH] org-clock.el: clocktable ':formula %' now includes per-file time pct Date: Sun, 31 Jan 2021 16:49:35 -0500 Message-ID: <87568139-5afb-480c-948c-4a65b5c8c0bb@www.fastmail.com> (raw) * 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
next reply other threads:[~2021-01-31 21:51 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-31 21:49 Alan D. Salewski [this message] [not found] <YBcSaba2GZ5ZLK25.ref@localhost> 2021-01-31 20:26 ` Alan D. Salewski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://orgmode.org * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=87568139-5afb-480c-948c-4a65b5c8c0bb@www.fastmail.com \ --to=ads@salewski.email \ --cc=emacs-orgmode@gnu.org \ --cc=salewski@att.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Org-mode mailing list This inbox may be cloned and mirrored by anyone: git clone --mirror https://orgmode.org/list/0 list/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 list list/ https://orgmode.org/list \ emacs-orgmode@gnu.org public-inbox-index list Example config snippet for mirrors. Newsgroups are available over NNTP: nntp://news.yhetil.org/yhetil.emacs.orgmode nntp://news.gmane.io/gmane.emacs.orgmode AGPL code for this site: git clone https://public-inbox.org/public-inbox.git