From e116969336c02021ac7db8f508eadd27e17bc106 Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Wed, 17 Apr 2024 16:06:44 +0300 Subject: [Fix] Rewrite selection of notes of tag - Use gnosis-tag-prompt to select tags - Implement 'due' logic on gnosis-select-by-tag --- gnosis.el | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/gnosis.el b/gnosis.el index 9508286..eb2cf1f 100644 --- a/gnosis.el +++ b/gnosis.el @@ -895,12 +895,16 @@ Optionally, add cusotm PROMPT." nconc tags into all-tags finally return (delete-dups all-tags))) -(defun gnosis-select-by-tag (input-tags) - "Return note ID's for every note with INPUT-TAGS." +(defun gnosis-select-by-tag (input-tags &optional due) + "Return note ID's for every note with INPUT-TAGS. + +If DUE, return only due notes." (cl-assert (listp input-tags) t "Input tags must be a list") + (cl-assert (booleanp due) "Due value must be a boolean") (cl-loop for (id tags) in (gnosis-select '[id tags] 'notes) when (and (cl-every (lambda (tag) (member tag tags)) input-tags) - (not (gnosis-suspended-p id))) + (not (gnosis-suspended-p id)) + (if due (gnosis-review-is-due-p id) t)) collect id)) (defun gnosis-suspended-p (id) @@ -936,17 +940,15 @@ PROMPT: Prompt string value MATCH: Require match, t or nil value DUE: if t, return tags for due notes from `gnosis-due-tags'." (let ((tags '())) - (cond ((and due (null (gnosis-review-get-due-notes))) - (error "No due notes")) - (t (cl-loop for tag = (completing-read - (concat prompt (format " (%s) (q for quit): " (mapconcat #'identity tags " "))) - (cons "q" (if due (gnosis-review-get-due-tags) - (gnosis-get-tags--unique))) - nil t) - until (string= tag "q") - unless (member tag tags) - do (push tag tags)) - tags)))) + (cl-loop for tag = (completing-read + (concat prompt (format " (%s) (q for quit): " (mapconcat #'identity tags " "))) + (cons "q" (if due (gnosis-review-get-due-tags) + (gnosis-get-tags--unique))) + nil t) + until (string= tag "q") + unless (member tag tags) + do (push tag tags)) + tags)) (defun gnosis-hint-prompt (previous-hint &optional prompt) "Prompt user for hint. @@ -1535,7 +1537,7 @@ to improve readability." "All notes of tag(s)")))) (pcase review-type ("Due notes" (gnosis-review--session (gnosis-collect-note-ids :due t))) - ("Due notes of deck" (gnosis-review--session (gnosis-collect-note-ids :due t :deck t))) + ("Due notes of deck" (gnosis-review--session (gnosis-collect-note-ids :due t :deck (gnosis--get-deck-id)))) ("Due notes of specified tag(s)" (gnosis-review--session (gnosis-collect-note-ids :due t :tags t))) ("All notes of tag(s)" (gnosis-review--session (gnosis-collect-note-ids :tags t)))))) @@ -1623,10 +1625,10 @@ Return note ids for notes that match QUERY." TAGS: boolean value, t to specify tags. DUE: boolean value, t to specify due notes. -DECK: boolean value, t to specify notes from deck. +DECK: Integer, specify deck id. QUERY: String value," - (cl-assert (and (booleanp due) (booleanp tags) (booleanp deck) (or (stringp query) (null query))) - nil "provide boolean value") + (cl-assert (and (booleanp due) (booleanp tags) (or (numberp deck) (null deck)) (or (stringp query) (null query))) + nil "Incorrect value passed to `gnosis-collect-note-ids'") (cond ((and (null tags) (null due) (null deck) (null query)) (gnosis-select 'id 'notes '1=1 t)) ;; All due notes @@ -1637,13 +1639,14 @@ QUERY: String value," (gnosis-select-by-tag (gnosis-tag-prompt))) ;; All due notes for tags ((and tags due (null deck)) - (gnosis-select-by-tag (gnosis-tag-prompt :due t))) + (gnosis-select-by-tag (gnosis-tag-prompt) t)) ;; All notes for deck ((and (null tags) (null due) deck) - (gnosis-get-deck-notes nil nil)) + (gnosis-get-deck-notes deck nil)) ;; All due notes for deck - ((and (null tags) due deck) - (gnosis-get-deck-notes nil t)) + ((and (null tags) deck due) + (gnosis-get-deck-notes deck t)) + ;; Query ((and (null tags) (null due) (null deck) query) (gnosis-search-note query)))) -- cgit v1.2.3