Hello, Stig Brautaset <s...@brautaset.org> writes:
> I think I like it. So I could then do something like: > > (defun sb/org-collect-confirmed-days () > "Return `DAYS' for `CONFIRMED' entries, otherwise return 0" > (let ((days (org-entry-get nil "DAYS")) > (confirmed (org-entry-get nil "CONFIRMED"))) > (if (and days (string= "[X]" confirmed)) > days > "0"))) > > (setq org-columns-summary-types > '(("X+" org-columns--summary-sum > sb/org-collect-confirmed-days))) That's the idea, expect it should take one argument, the property being summarized. > That seems quite elegant! I guess the COLLECT function would be called > in `org-agenda-colview-summarize' such that the existing summary > functions would not need to change? No, it wouldn't. It would be called in `org-columns--compute-spec' where `value' is bound. Actually, we could write a getter, `org-columns--collect', which would return COLLECT, as defined in the summary, or (lambda (p) (org-entry-get (point) p)) Note that COLLECT function is called on a headline. Returning an empty string means the property has no value (per `value-set' in the function `org-columns--compute-spec'). > Though, there will then be a tight coupling between the "X+" label and > the column name, which is not ideal. Perhaps the COLLECT function could > (optionally?) take the column name Indeed. > I don't mind having a go at adding support for this, Great. Implementation-wise, I think there is not much to do. But it needs to be documented and tested in "test-org-colview.el". Thank you! Regards, -- Nicolas Goaziou