Comment: Update some to-dos

This commit is contained in:
Adam Porter 2019-08-31 23:28:12 -05:00
parent 932960c686
commit ad9de23987
2 changed files with 10 additions and 12 deletions

View file

@ -414,10 +414,11 @@ replace the clause with a preamble."
;; Return nil, because we don't need to test the predicate. ;; Return nil, because we don't need to test the predicate.
nil) nil)
(`(todo . ,(and todo-keywords (guard todo-keywords))) (`(todo . ,(and todo-keywords (guard todo-keywords)))
;; FIXME: With case-folding, a query like (todo "WAITING") can find a non-todo ;; FIXME: With case-folding, a query like (todo "WAITING") can find a
;; heading named "Waiting". For correctness, we could test the predicate ;; non-todo heading named "Waiting". For correctness, we could test the
;; anyway, but that would negate some of the speed, and in most cases it ;; predicate anyway, but that would negate some of the speed, and in
;; probably won't matter, so I'm leaving it this way for now. ;; most cases it probably won't matter, so I'm leaving it this way for
;; now. Maybe we should use a special variable to control case-folding.
(setq org-ql-preamble (setq org-ql-preamble
(rx-to-string `(seq bol (1+ "*") (1+ space) (or ,@todo-keywords) (or " " eol)) (rx-to-string `(seq bol (1+ "*") (1+ space) (or ,@todo-keywords) (or " " eol))
t)) t))
@ -624,7 +625,7 @@ If NARROW is non-nil, buffer will not be widened."
ELEMENT should be an Org element like that returned by ELEMENT should be an Org element like that returned by
`org-element-headline-parser'. This function should be called `org-element-headline-parser'. This function should be called
from within ELEMENT's buffer." from within ELEMENT's buffer."
;; FIXME: `org-agenda-new-marker' works, until it doesn't, because...I don't know. It sometimes ;; NOTE: `org-agenda-new-marker' works, until it doesn't, because...I don't know. It sometimes
;; raises errors or returns markers that don't point into a buffer. `copy-marker' always works, ;; raises errors or returns markers that don't point into a buffer. `copy-marker' always works,
;; of course, but maybe it will leave "dangling" markers, which could affect performance over ;; of course, but maybe it will leave "dangling" markers, which could affect performance over
;; time? I don't know, but for now, it seems that we have to use `copy-marker'. ;; time? I don't know, but for now, it seems that we have to use `copy-marker'.
@ -765,7 +766,7 @@ priority."
(setq priority (* 1000 (- org-lowest-priority (string-to-char priority)))) (setq priority (* 1000 (- org-lowest-priority (string-to-char priority))))
(when-let ((item-priority (save-excursion (when-let ((item-priority (save-excursion
(save-match-data (save-match-data
;; FIXME: Is the save-match-data above necessary? ;; TODO: Is the save-match-data above necessary?
(when (and (looking-at org-heading-regexp) (when (and (looking-at org-heading-regexp)
(save-match-data (save-match-data
(string-match org-priority-regexp (match-string 0)))) (string-match org-priority-regexp (match-string 0))))
@ -976,7 +977,6 @@ of the line after the heading."
;; TODO: DRY this with the clocked predicate. ;; TODO: DRY this with the clocked predicate.
;; NOTE: FROM and TO are actually expected to be `ts' structs. The docstring is written ;; NOTE: FROM and TO are actually expected to be `ts' structs. The docstring is written
;; for end users, for which the arguments are pre-processed by `org-ql-select'. ;; for end users, for which the arguments are pre-processed by `org-ql-select'.
;; FIXME: This assumes every "clocked" entry is a range. Unclosed clock entries are not handled.
(cl-macrolet ((next-timestamp () (cl-macrolet ((next-timestamp ()
`(when (re-search-forward regexp limit t) `(when (re-search-forward regexp limit t)
(ts-parse-org (match-string match-group)))) (ts-parse-org (match-string match-group))))
@ -992,25 +992,25 @@ of the line after the heading."
;;;;; Sorting ;;;;; Sorting
;; FIXME: These appear to work properly, but it would be good to have tests for them. ;; TODO: These appear to work properly, but it would be good to have tests for them.
;; MAYBE: Add timestamp sorter. Could be slow in some cases, without clever caching of timestamps per-entry. ;; MAYBE: Add timestamp sorter. Could be slow in some cases, without clever caching of timestamps per-entry.
(defun org-ql--sort-by (items predicates) (defun org-ql--sort-by (items predicates)
"Return ITEMS sorted by PREDICATES. "Return ITEMS sorted by PREDICATES.
PREDICATES is a list of one or more sorting methods, including: PREDICATES is a list of one or more sorting methods, including:
`deadline', `scheduled', and `priority'." `deadline', `scheduled', and `priority'."
;; FIXME: Test `date' type.
;; MAYBE: Use macrolet instead of flet. ;; MAYBE: Use macrolet instead of flet.
(cl-flet* ((sorter (symbol) (cl-flet* ((sorter (symbol)
(pcase symbol (pcase symbol
((or 'deadline 'scheduled) ((or 'deadline 'scheduled)
(apply-partially #'org-ql--date-type< (intern (concat ":" (symbol-name symbol))))) (apply-partially #'org-ql--date-type< (intern (concat ":" (symbol-name symbol)))))
;; TODO: Rename `date' to `planning'. `date' should be something else.
('date #'org-ql--date<) ('date #'org-ql--date<)
('priority #'org-ql--priority<) ('priority #'org-ql--priority<)
('random (lambda (&rest _ignore) ('random (lambda (&rest _ignore)
(= 0 (random 2)))) (= 0 (random 2))))
;; NOTE: 'todo is handled below ;; NOTE: 'todo is handled below
;; FIXME: Add more? ;; TODO: Add more.
(_ (user-error "Invalid sorting predicate: %s" symbol)))) (_ (user-error "Invalid sorting predicate: %s" symbol))))
(sort-by-todo-keyword (items) (sort-by-todo-keyword (items)
(let* ((grouped-items (--group-by (when-let (keyword (org-element-property :todo-keyword it)) (let* ((grouped-items (--group-by (when-let (keyword (org-element-property :todo-keyword it))

View file

@ -557,8 +557,6 @@ RESULTS should be a list of strings as returned by
'("Take over the universe" "Take over the world" "Skype with president of Antarctica" "Take over Mars" "Visit Mars" "Take over the moon" "Visit the moon" "Practice leaping tall buildings in a single bound" "Renew membership in supervillain club" "Order a pizza" "Get haircut" "Internet" "Spaceship lease" "Fix flux capacitor" "/r/emacs" "Shop for groceries" "Rewrite Emacs in Common Lisp" "Write a symphony"))) '("Take over the universe" "Take over the world" "Skype with president of Antarctica" "Take over Mars" "Visit Mars" "Take over the moon" "Visit the moon" "Practice leaping tall buildings in a single bound" "Renew membership in supervillain club" "Order a pizza" "Get haircut" "Internet" "Spaceship lease" "Fix flux capacitor" "/r/emacs" "Shop for groceries" "Rewrite Emacs in Common Lisp" "Write a symphony")))
(org-ql-it "with 1 argument" (org-ql-it "with 1 argument"
;; FIXME: Figure out why this takes >10x longer than the other (todo)
;; tests, according to Buttercup. Might just be GC, though.
(org-ql-expect ((todo "WAITING") (org-ql-expect ((todo "WAITING")
:sort todo) :sort todo)
'("Visit the moon"))) '("Visit the moon")))