From c3a5bbbdfef1d05a77bb166988aaaf13649e72b6 Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Wed, 1 May 2024 20:49:17 +0300 Subject: Start 0.2.4-dev --- gnosis.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnosis.el b/gnosis.el index a67c80b..392b3a2 100644 --- a/gnosis.el +++ b/gnosis.el @@ -5,7 +5,7 @@ ;; Author: Thanos Apollo ;; Keywords: extensions ;; URL: https://thanosapollo.org/projects/gnosis -;; Version: 0.2.3 +;; Version: 0.2.4-dev ;; Package-Requires: ((emacs "27.2") (emacsql "20240124") (compat "29.1.4.2")) -- cgit v1.2.3 From 6d8bb7376b7b83d998e230c3f4b3d5948f43183e Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Wed, 1 May 2024 20:49:34 +0300 Subject: gnosis-display: Use fill-paragraph as optional arg --- gnosis.el | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/gnosis.el b/gnosis.el index 392b3a2..8f779bf 100644 --- a/gnosis.el +++ b/gnosis.el @@ -280,11 +280,15 @@ Example: if (= i index) collect new-item else collect item)) -(defun gnosis-display-question (id) - "Display main row for note ID." +(defun gnosis-display-question (id &optional fill-paragraph-p) + "Display main row for note ID. + +If FILL-PARAGRAPH-P, insert question using `fill-paragraph'." (let ((question (gnosis-get 'main 'notes `(= id ,id)))) (erase-buffer) - (fill-paragraph (insert "\n" (propertize question 'face 'gnosis-face-main))))) + (if fill-paragraph-p + (fill-paragraph (insert "\n" (propertize question 'face 'gnosis-face-main)))) + (insert "\n" (propertize question 'face 'gnosis-face-main)))) (defun gnosis-display-mcq-options (id) "Display answer options for mcq note ID." @@ -295,12 +299,17 @@ Example: do (insert (format "\n%s. %s" option-num option)) (setf option-num (1+ option-num))))) -(defun gnosis-display-cloze-sentence (sentence clozes) - "Display cloze sentence for SENTENCE with CLOZES." +(defun gnosis-display-cloze-sentence (sentence clozes &optional fill-paragraph-p) + "Display cloze sentence for SENTENCE with CLOZES. + +If FILL-PARAGRAPH-P, insert using `fill-paragraph'" (erase-buffer) - (fill-paragraph - (insert "\n" - (gnosis-cloze-replace-words sentence clozes (propertize gnosis-cloze-string 'face 'gnosis-face-cloze))))) + (let ((cloze-sentence + (gnosis-cloze-replace-words sentence clozes (propertize gnosis-cloze-string 'face 'gnosis-face-cloze)))) + (if fill-paragraph-p + (fill-paragraph + (insert "\n" cloze-sentence)) + (insert "\n" cloze-sentence)))) (defun gnosis-display-basic-answer (answer success user-input) "Display ANSWER. -- cgit v1.2.3 From 84530976cf523605514498e985bb48803a83f534 Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Thu, 9 May 2024 23:14:34 +0300 Subject: Remove gnosis-review-override This should be done more elegantly within a gnosis-review-actions without a y-or-n prompt --- gnosis.el | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/gnosis.el b/gnosis.el index ea23edd..9797c16 100644 --- a/gnosis.el +++ b/gnosis.el @@ -437,7 +437,7 @@ Also see `gnosis-string-edit'." (propertize (format "%s" interval) 'face 'gnosis-face-next-review)))) (if (search-backward "Next review" nil t) ;; Delete previous result, and override with new this should - ;; occur only when used with `gnosis-review-override' + ;; occur only when used for overriding review result. (progn (delete-region (point) (progn (end-of-line) (point))) (insert (propertize (replace-regexp-in-string "\n" "" next-review-msg) 'face (if success 'gnosis-face-correct 'gnosis-face-false)))) @@ -1274,15 +1274,6 @@ NOTE-NUM: The number of notes reviewed in the session." (gnosis-vc-push)) (message "Review session finished. %d notes reviewed." note-num))) -(defun gnosis-review-override (id success) - "Override review result of note ID. - -Reverse the result of review SUCCESS." - (let ((success-new (if success nil t))) - (gnosis-display-next-review id success-new) - (if (y-or-n-p (format "Override review result as %s?" (if success-new "`SUCCESS'" "`FAILURE'"))) - (gnosis-review--update id success-new) - (gnosis-review-override id success-new)))) (defun gnosis-review--session (notes) "Start review session for NOTES. -- cgit v1.2.3 From f354a7dc077b36393efdd1c024f8f1d9d4390ed0 Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Thu, 9 May 2024 23:15:11 +0300 Subject: [Refactor] Add gnosis-review-actions Seperate actions to take during review of gnosis note. Use recursion to be able to do more than one action, e.g edit & then override note. --- gnosis.el | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/gnosis.el b/gnosis.el index 9797c16..4ed7b11 100644 --- a/gnosis.el +++ b/gnosis.el @@ -1274,6 +1274,30 @@ NOTE-NUM: The number of notes reviewed in the session." (gnosis-vc-push)) (message "Review session finished. %d notes reviewed." note-num))) +(defun gnosis-review-actions (success note note-count) + "Specify action during review of note. + +SUCCESS: Review result +NOTE: Note ID +NOTE-COUNT: Total notes reviewed" + (pcase (car (read-multiple-choice + "Note actions" + '((?n "next") + (?o "override") + (?s "suspend") + (?e "edit") + (?q "quit")))) + (?n (gnosis-review--update note success)) + (?o (setf success (if success nil t)) + (gnosis-display-next-review note success) + (gnosis-review-actions success note note-count)) + (?s (gnosis-suspend-note note)) + (?e (gnosis-edit-note note t) + (recursive-edit) + (gnosis-review-actions success note note-count)) + (?q (gnosis-review--update note success) + (gnosis-review-commit note-count) + (cl-return)))) (defun gnosis-review--session (notes) "Start review session for NOTES. @@ -1286,22 +1310,7 @@ NOTES: List of note ids" (cl-loop for note in notes do (let ((success (gnosis-review-note note))) (setf note-count (1+ note-count)) - (pcase (car (read-multiple-choice - "Note actions" - '((?n "next") - (?o "override") - (?s "suspend") - (?e "edit") - (?q "quit")))) - (?n (gnosis-review--update note success)) - (?o (gnosis-review-override note success)) - (?s (gnosis-suspend-note note)) - (?e (gnosis-review--update note success) - (gnosis-edit-note note t) - (recursive-edit)) - (?q (gnosis-review--update note success) - (gnosis-review-commit note-count) - (cl-return))) + (gnosis-review-actions success note note-count) (setq gnosis-due-notes-total (length (gnosis-review-get-due-notes)))) finally (gnosis-review-commit note-count)))))) -- cgit v1.2.3 From 0c7770f3bad2e5f656eadfb18190a7e8e778a613 Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Fri, 10 May 2024 00:06:38 +0300 Subject: gnosis-review-session: Use catch-throw - Rename to gnosis-review-session - Use catch-throw to break out of the cl-loop --- gnosis.el | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/gnosis.el b/gnosis.el index 4ed7b11..549cebc 100644 --- a/gnosis.el +++ b/gnosis.el @@ -1297,9 +1297,10 @@ NOTE-COUNT: Total notes reviewed" (gnosis-review-actions success note note-count)) (?q (gnosis-review--update note success) (gnosis-review-commit note-count) - (cl-return)))) + ;; Break the loop of `gnosis-review-session' + (throw 'stop-loop t)))) -(defun gnosis-review--session (notes) +(defun gnosis-review-session (notes) "Start review session for NOTES. NOTES: List of note ids" @@ -1307,13 +1308,13 @@ NOTES: List of note ids" (if (null notes) (message "No notes for review.") (when (y-or-n-p (format "You have %s total notes for review, start session?" (length notes))) - (cl-loop for note in notes - do (let ((success (gnosis-review-note note))) - (setf note-count (1+ note-count)) - (gnosis-review-actions success note note-count) - (setq gnosis-due-notes-total (length (gnosis-review-get-due-notes)))) - finally (gnosis-review-commit note-count)))))) - + (catch 'stop-loop + (cl-loop for note in notes + do (let ((success (gnosis-review-note note))) + (setf note-count (1+ note-count)) + (gnosis-review-actions success note note-count) + (setf gnosis-due-notes-total (length (gnosis-review-get-due-notes)))) + finally (gnosis-review-commit note-count))))))) ;; Editing notes (defun gnosis-edit-read-only-values (&rest values) @@ -1594,10 +1595,10 @@ to improve readability." "Due notes of specified tag(s)" "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 (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)))))) + ("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 (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)))))) ;;; Database Schemas (defvar gnosis-db-schema-decks '([(id integer :primary-key :autoincrement) -- cgit v1.2.3 From ffbc9d197612d8f41ff251f7daeb92eac378172f Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Fri, 10 May 2024 00:07:31 +0300 Subject: Update copyrights --- gnosis.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnosis.el b/gnosis.el index 549cebc..967bc60 100644 --- a/gnosis.el +++ b/gnosis.el @@ -1,6 +1,6 @@ ;;; gnosis.el --- Spaced Repetition System -*- lexical-binding: t; -*- -;; Copyright (C) 2023 Thanos Apollo +;; Copyright (C) 2023-2024 Thanos Apollo ;; Author: Thanos Apollo ;; Keywords: extensions -- cgit v1.2.3 From f4b158c4c67fb3f41ce9069d16a77e19149fca25 Mon Sep 17 00:00:00 2001 From: Thanos Apollo Date: Fri, 10 May 2024 12:18:40 +0300 Subject: Version bump: 0.2.4 --- gnosis.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnosis.el b/gnosis.el index 967bc60..50c35f2 100644 --- a/gnosis.el +++ b/gnosis.el @@ -5,7 +5,7 @@ ;; Author: Thanos Apollo ;; Keywords: extensions ;; URL: https://thanosapollo.org/projects/gnosis -;; Version: 0.2.4-dev +;; Version: 0.2.4 ;; Package-Requires: ((emacs "27.2") (emacsql "20240124") (compat "29.1.4.2")) -- cgit v1.2.3