I would like to sum clock intervals from tasks by tag. I found this blog post (code below). When I use it, I get the same report, regardless of the tag I request:
Time: 4499:28 (4499 hours and 28 minutes)
Furthermore, I get this warning after evaluating the code:
‘org-re’ is an obsolete macro (as of Org 9.0); you can safely remove it.
The post is from 2008 and therefore I assume that the code is incompatible with my version.
How can I sum clocked intervals for a specific tag?
Appendix: here is the obsolete code:
(defun wicked/org-calculate-tag-time (matcher &optional ts te)
"Return the total minutes clocked in headlines matching MATCHER.
MATCHER is a string or a Lisp form to be evaluated, testing if a
given set of tags qualifies a headline for inclusion. TS and TE
are time start (inclusive) and time end (exclusive). Call with a
prefix to be prompted for TS and TE.
For example, to see how much time you spent on tasks tagged as
URGENT, call M-x wicked/org-calculate-tag-time RET URGENT RET. To
see how much time you spent on tasks tagged as URGENT today, call
C-u M-x wicked/org-calculate-tag-time RET URGENT RET . RET +1 RET."
(interactive (list
(read-string "Tag query: ")
(if current-prefix-arg (org-read-date))
(if current-prefix-arg (org-read-date))))
;; Convert strings to proper arguments
(if (stringp matcher) (setq matcher (cdr (org-make-tags-matcher matcher))))
(if (stringp ts)
(setq ts (time-to-seconds (apply 'encode-time (org-parse-time-string ts)))))
(if (stringp te)
(setq te (time-to-seconds (apply 'encode-time (org-parse-time-string te)))))
(let* ((re (concat "[\n\r]" outline-regexp " *\\(\\<\\("
(mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
(org-re
"\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:][email protected]:]+:\\)?[ \t]*$")))
(case-fold-search nil)
lspos
tags tags-list tags-alist (llast 0) rtn level category i txt p
marker entry priority (total 0))
(save-excursion
(org-clock-sum ts te)
(goto-char (point-min))
(while (re-search-forward re nil t)
(catch :skip
(setq tags (if (match-end 4) (match-string 4)))
(goto-char (setq lspos (1+ (match-beginning 0))))
(setq level (org-reduced-level (funcall outline-level))
category (org-get-category))
(setq i llast llast level)
;; remove tag lists from same and sublevels
(while (>= i level)
(when (setq entry (assoc i tags-alist))
(setq tags-alist (delete entry tags-alist)))
(setq i (1- i)))
;; add the nex tags
(when tags
(setq tags (mapcar 'downcase (org-split-string tags ":"))
tags-alist
(cons (cons level tags) tags-alist)))
;; compile tags for current headline
(setq tags-list
(if org-use-tag-inheritance
(apply 'append (mapcar 'cdr tags-alist))
tags))
(when (and (eval matcher)
(or (not org-agenda-skip-archived-trees)
(not (member org-archive-tag tags-list))))
;; Get the time for the headline at point
(goto-char (line-beginning-position))
(setq total (+ total (or (get-text-property (1+ (point)) :org-clock-minutes) 0)))
;; if we are to skip sublevels, jump to end of subtree
(org-end-of-subtree t)))))
(if (interactive-p)
(let* ((h (/ total 60))
(m (- total (* 60 h))))
(message "Time: %d:%02d (%d hours and %d minutes)" h m h m)))
total))
#+BEGIN: clocktable :maxlevel 2 :scope file :tags "nicetag"
). I can't mark it as a duplicate: would you like to write an answer? Thanks for the comment @NickD: next time I'll ask what I want to do first, and add an example of a way that failed after.