From 1f362535a109939081a9a65a4601add87afc052d Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Wed, 27 May 2026 01:11:35 -0500 Subject: feat: undo last rating, customizable keys, and configurable text limit A batch of self-contained user-facing improvements, squashed from the feat/org-drill-solo-features branch. I added an undo for the last rating (issue #2 follow-up). The rating prompt now takes an undo key (org-drill--undo-key, default u): it restores the previous card's scheduling snapshot, drops the recorded quality, and re-queues that card, then returns to the current prompt. Each rating snapshots the scheduling properties and SCHEDULED line onto a per-session stack capped at org-drill-undo-limit (default 3). org-drill-reschedule loops on the rating read so undo doesn't rate the current card. I made the five session-control keys (quit, edit, help, skip, tags) defcustoms so they can be rebound from customize-group (issue #35), keeping their defaults. The 0-5 rating keys stay as-is, since they're tied to the quality scale rather than being variables. I lifted the hardcoded 100-line entry-text limit in org-drill-get-entry-text into the org-drill-entry-text-max-lines defcustom, defaulting to 100. I also deleted a commented-out old org-entry-empty-p that the real definition had already replaced. Existing tests stay green and each change added its own, including snapshot/restore and prompt-loop tests for undo. --- tests/test-org-drill-session-keys.el | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/test-org-drill-session-keys.el (limited to 'tests/test-org-drill-session-keys.el') diff --git a/tests/test-org-drill-session-keys.el b/tests/test-org-drill-session-keys.el new file mode 100644 index 0000000..ff1b4b1 --- /dev/null +++ b/tests/test-org-drill-session-keys.el @@ -0,0 +1,33 @@ +;;; test-org-drill-session-keys.el --- Tests for customizable session keys -*- lexical-binding: t; -*- + +;;; Commentary: +;; The session-control keys (quit/edit/help/skip/tags) are defcustoms so they +;; can be rebound through customize-group (upstream issue #35), while keeping +;; their historical default characters. + +;;; Code: + +(require 'ert) +(require 'org-drill) + +(defconst test-org-drill-session-key-defaults + '((org-drill--quit-key . ?q) + (org-drill--edit-key . ?e) + (org-drill--help-key . ??) + (org-drill--skip-key . ?s) + (org-drill--tags-key . ?t)) + "Each session-control key variable and its historical default character.") + +(ert-deftest test-org-drill-session-keys-are-customizable () + "Each session-control key is a defcustom, so customize-group can set it." + (dolist (cell test-org-drill-session-key-defaults) + (should (custom-variable-p (car cell))))) + +(ert-deftest test-org-drill-session-keys-keep-their-defaults () + "Promoting to defcustom does not change the default bindings." + (dolist (cell test-org-drill-session-key-defaults) + (should (eq (cdr cell) (default-value (car cell)))))) + +(provide 'test-org-drill-session-keys) + +;;; test-org-drill-session-keys.el ends here -- cgit v1.2.3