`effort-minutes` text property not applied to items in `org-ql-block`s
Opened this issue · 1 comments
OS/platform
Linux (Arch based)
Emacs version and provenance
I am a Doom Emacs user.
GNU Emacs v29.4 nil
Doom core v3.0.0-pre HEAD -> master d6bc2b0f1 2024-09-02 01:10:58 -0400
Doom modules v24.10.0-pre HEAD -> master d6bc2b0f1 2024-09-02 01:10:58 -0400
Emacs command
org-agenda-filter-by-effort
Org version and provenance
Package: org
Source: Straight
Pinned: f398724bd53eb6af3cf4187c864ec6f89a22ef59
Build: grafted, HEAD -> main, replaced f398724 2024-07-17 16:11:14 +0200
Version: 9.6.15
org-ql package version and provenance
Straight, HEAD -> master, origin/master, origin/HEAD d574b60 2024-09-11 01:50:16 -0500
Actions taken
- Add a few test tasks with an
effort
property set to0:30
- Display those tasks along with others in an
org-ql-block
- Type
s e
, then=
, then3
Observed results
An error is thrown, see backtrace below.
Expected results
Repeating the same process using the built-in agenda TODO view restricts the agenda to the test tasks with an effort
property set to a value of 0:30
. I would expect the same behavior.
Backtrace
Debugger entered--Lisp error: (args-out-of-range 0 0)
get-text-property(0 effort-minutes nil)
(let ((effort (get-text-property 0 'effort-minutes (org-get-at-bol 'txt)))) (funcall op (or effort (if org-agenda-sort-noeffort-is-high 32767 -1)) value))
org-agenda-compare-effort(= 30.0)
(and (org-agenda-compare-effort '= 30.0))
eval((and (org-agenda-compare-effort '= 30.0)) t)
(if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type))
(let* ((tags (org-get-at-bol 'tags)) (cat (org-agenda-get-category)) (txt (or (org-get-at-bol 'txt) ""))) (if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type)))
(progn (with-no-warnings (defvar tags) (defvar cat) (defvar txt)) (let* ((tags (org-get-at-bol 'tags)) (cat (org-agenda-get-category)) (txt (or (org-get-at-bol 'txt) ""))) (if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type))))
(progn (progn (with-no-warnings (defvar tags) (defvar cat) (defvar txt)) (let* ((tags (org-get-at-bol 'tags)) (cat (org-agenda-get-category)) (txt (or (org-get-at-bol 'txt) ""))) (if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type)))))
(if (or (org-get-at-bol 'org-hd-marker) (org-get-at-bol 'org-marker)) (progn (progn (with-no-warnings (defvar tags) (defvar cat) (defvar txt)) (let* ((tags (org-get-at-bol 'tags)) (cat (org-agenda-get-category)) (txt (or (org-get-at-bol ...) ""))) (if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type))))))
(while (not (eobp)) (if (or (org-get-at-bol 'org-hd-marker) (org-get-at-bol 'org-marker)) (progn (progn (with-no-warnings (defvar tags) (defvar cat) (defvar txt)) (let* ((tags (org-get-at-bol ...)) (cat (org-agenda-get-category)) (txt (or ... ""))) (if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type)))))) (forward-line 1))
(save-excursion (goto-char (point-min)) (while (not (eobp)) (if (or (org-get-at-bol 'org-hd-marker) (org-get-at-bol 'org-marker)) (progn (progn (with-no-warnings (defvar tags) (defvar cat) (defvar txt)) (let* ((tags ...) (cat ...) (txt ...)) (if (eval org-agenda-filter-form t) nil (org-agenda-filter-hide-line type)))))) (forward-line 1)))
org-agenda-filter-apply(("+=0:30") effort)
(let ((prompt (apply #'format (concat "Effort %c " (mapconcat #'(lambda ... ...) efforts " ")) op allowed-keys)) (eff -1)) (while (not (memq eff allowed-keys)) (message prompt) (setq eff (- (read-char-exclusive) 48))) (org-agenda-filter-show-all-effort) (setq org-agenda-effort-filter (append (list (concat (if negative "-" "+") (char-to-string op) (nth (mod (1- eff) 10) efforts))) (if keep current nil))) (org-agenda-filter-apply org-agenda-effort-filter 'effort))
(if (eq op 95) (progn (org-agenda-filter-show-all-effort) (message "Effort filter removed")) (let ((prompt (apply #'format (concat "Effort %c " (mapconcat #'... efforts " ")) op allowed-keys)) (eff -1)) (while (not (memq eff allowed-keys)) (message prompt) (setq eff (- (read-char-exclusive) 48))) (org-agenda-filter-show-all-effort) (setq org-agenda-effort-filter (append (list (concat (if negative "-" "+") (char-to-string op) (nth (mod ... 10) efforts))) (if keep current nil))) (org-agenda-filter-apply org-agenda-effort-filter 'effort)))
(let* ((efforts (split-string (or (cdr (assoc-string (concat org-effort-property "_ALL") org-global-properties t)) "0 0:10 0:30 1:00 2:00 3:00 4:00 5:00 6:00 7:00"))) (allowed-keys (if (null efforts) nil (mapcar #'(lambda (n) (mod n 10)) (number-sequence 1 (length efforts))))) (keep (equal strip-or-accumulate '(16))) (negative (equal strip-or-accumulate '(4))) (current org-agenda-effort-filter) (op nil)) (while (not (memq op '(60 62 61 95))) (setq op (read-char-exclusive "Effort operator? (> = or <) or press `_' again..."))) (if (eq op 95) (progn (org-agenda-filter-show-all-effort) (message "Effort filter removed")) (let ((prompt (apply #'format (concat "Effort %c " (mapconcat ... efforts " ")) op allowed-keys)) (eff -1)) (while (not (memq eff allowed-keys)) (message prompt) (setq eff (- (read-char-exclusive) 48))) (org-agenda-filter-show-all-effort) (setq org-agenda-effort-filter (append (list (concat (if negative "-" "+") (char-to-string op) (nth ... efforts))) (if keep current nil))) (org-agenda-filter-apply org-agenda-effort-filter 'effort))))
org-agenda-filter-by-effort(nil)
funcall-interactively(org-agenda-filter-by-effort nil)
call-interactively(org-agenda-filter-by-effort nil nil)
command-execute(org-agenda-filter-by-effort)
Etc.
I did not test seriously, but I do not get the same results with an org-ql-block
, and the built-in agenda view when using s r
to filter using a regex. No error is thrown, but all tasks are filtered out in the org-ql-block
.
This happens because the effort-minutes
text property is not applied by org-ql-view--format-element
. It's simply unimplemented. I probably won't have time to get to this soon, so patches welcome.