diff options
| author | Phillip Lord <phillip.lord@russet.org.uk> | 2020-04-12 18:11:20 +0000 |
|---|---|---|
| committer | Phillip Lord <phillip.lord@russet.org.uk> | 2020-04-12 18:11:20 +0000 |
| commit | b05f06a4b15bffffdcaeb1a30482afd94c12746a (patch) | |
| tree | 691f7c78eb21906a03bdc3896c4bc719930d7a3f | |
| parent | 0c89f344ce019e03df278578414617b74034031b (diff) | |
| parent | ec2c168797380c7e41c13a9260c79139bed3300c (diff) | |
| download | org-drill-b05f06a4b15bffffdcaeb1a30482afd94c12746a.tar.gz org-drill-b05f06a4b15bffffdcaeb1a30482afd94c12746a.zip | |
Merge branch 'branweb/fix-cram-mode' into 'master'
Allow Creating New Session in Cram Mode
See merge request phillord/org-drill!9
| -rw-r--r-- | .gitignore | 10 | ||||
| -rw-r--r-- | org-drill.el | 13 | ||||
| -rw-r--r-- | robot/cram-run.el | 24 | ||||
| -rwxr-xr-x | robot/cram-run.sh | 39 | ||||
| -rw-r--r-- | robot/robot.el | 21 |
5 files changed, 87 insertions, 20 deletions
@@ -4,13 +4,7 @@ org-drill.html /elpa /makefile-local /robot/Makefile -/robot/main-test-copy.org /robot/failure.txt /robot/messages.txt -/robot/main-test-copy.org~ -/robot/main-test-interactive-copy.org -/robot/all-card-copy.org -/robot/basic-run-copy.org -/robot/leitner-run-copy.org -/robot/spanish-robot-copy.org -/robot/explainer-run-copy.org +/robot/*-copy.org + diff --git a/org-drill.el b/org-drill.el index 48ea08a..d7a840b 100644 --- a/org-drill.el +++ b/org-drill.el @@ -2855,7 +2855,7 @@ STATUS is one of the following values: (setf (oref session warned-about-id-creation) t)) (org-id-get-create)) -(defun org-drill (&optional scope drill-match resume-p) +(defun org-drill (&optional scope drill-match resume-p cram) "Begin an interactive 'drill session'. The user is asked to review a series of topics (headers). Each topic is initially presented as a 'question', often with part of the topic content @@ -2888,7 +2888,10 @@ todo query. Only items matching the query will be considered. It accepts the same values as `org-drill-match', which see. If RESUME-P is non-nil, resume a suspended drill session rather -than starting a new one." +than starting a new one. + +CRAM, if non-nil, will start a new session in cram mode. If +resuming a suspended session, this parameter is ignored." (interactive) ;; Check org version. Org 7.9.3f introduced a backwards-incompatible change @@ -2909,7 +2912,8 @@ work correctly with older versions of org mode. Your org mode version (%s) appea (cl-block org-drill (unless resume-p (org-drill-free-markers session t) - (setf (oref session current-item) nil + (setf (oref session cram-mode) cram + (oref session current-item) nil (oref session done-entries) nil (oref session dormant-entry-count) 0 (oref session due-entry-count) 0 @@ -2980,8 +2984,7 @@ all drill items are considered to be due for review, unless they have been reviewed within the last `org-drill-cram-hours' hours." (interactive) - (setq (oref session cram-mode) t) - (org-drill scope drill-match)) + (org-drill scope drill-match nil t)) (defun org-drill-cram-tree () "Run an interactive drill session in 'cram mode' using subtree at point. diff --git a/robot/cram-run.el b/robot/cram-run.el new file mode 100644 index 0000000..a754013 --- /dev/null +++ b/robot/cram-run.el @@ -0,0 +1,24 @@ +(load-file "robot/robot.el") +(load-file "org-drill.el") + +;; setup +(copy "basic-run.org" "cram-run-copy.org") + +;; normal run +(find "cram-run-copy.org") +(org-drill) +(set-buffer-modified-p nil) +(kill-buffer) +(robot-check-cards-seen 3) + +;; cram run with all cards reviewed less than `org-drill-cram-hours` +;; ago, so we expect no new cards to be seen +(find "cram-run-copy.org") +(org-drill-cram) +(robot-check-cards-seen 3) + +;; cram run that should include all cards, so we expect seen cards to +;; double +(setq org-drill-cram-hours 0) +(org-drill-cram) +(robot-check-cards-seen-and-die 6) diff --git a/robot/cram-run.sh b/robot/cram-run.sh new file mode 100755 index 0000000..a4d6ec9 --- /dev/null +++ b/robot/cram-run.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +set -e + +this_dir="$(dirname "$0")" +source ${this_dir}/robot.sh + +card_no=3 + +# cram mode doesn't modify the buffer so there is no save prompt +function run_drill_no_save { + sleep_small + + for i in `seq 1 ${card_no}`; + do + echo Answer: "$i" + send_answer + done + + echo press any key to continue + retn +} + +function run_drill { + run_drill_no_save + echo Save file + key y +} + + +launch_emacs ${this_dir}/cram-run.el + +{ + find_bot + run_drill + retn + run_drill_no_save + wait_emacs +} || cat robot/failure.txt diff --git a/robot/robot.el b/robot/robot.el index f7053b8..3d965b0 100644 --- a/robot/robot.el +++ b/robot/robot.el @@ -55,18 +55,25 @@ (run-with-timer 1 1 #'robot-dump-messages) -(defun robot-check-cards-seen-and-die (n) +(defun robot-check-cards-seen (n) + "N is number of cards we expect to have seen this session. +Returns a number representing an exit status code" (if (= n org-drill-cards-in-this-emacs) (progn (princ (format "Succeeded: Saw %s cards as expected\n" n) 'external-debugging-output) - (kill-emacs 0)) - (princ - (format "Failed: Saw %s cards, expecting %s\n" - org-drill-cards-in-this-emacs n) - 'external-debugging-output) - (kill-emacs -1))) + 0) + (progn + (princ + (format "Failed: Saw %s cards, expecting %s\n" + org-drill-cards-in-this-emacs n) + 'external-debugging-output) + -1))) + +(defun robot-check-cards-seen-and-die (n) + "N is number of cards we expect to have seen this session." + (kill-emacs (robot-check-cards-seen n))) ;; Move the package-user-dir somewhere local (require 'package) |
