aboutsummaryrefslogtreecommitdiff
path: root/README.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-05 10:10:30 -0500
committerCraig Jennings <c@cjennings.net>2026-05-05 10:10:30 -0500
commit6bb7f9b91304847d92222bf25ca6021fd82d468d (patch)
tree22d942ca1f06bebb89bea90ad1fb596e813e5c2a /README.org
parentcbc1351a131a2c358b211d886cc8c687f57657b1 (diff)
downloadorg-drill-6bb7f9b91304847d92222bf25ca6021fd82d468d.tar.gz
org-drill-6bb7f9b91304847d92222bf25ca6021fd82d468d.zip
docs: rewrite README as a slim modernized front-door
Replaced the 1049-line README.md (which inlined the entire user manual) with a ~227-line README.org that's the standard 'GitHub front page' for an Emacs package. The deep manual lives where it already does — in org-drill.org, which is also a runnable demo deck. Sections, in order: - Title + nav links - Five badges: made-for-emacs, MELPA, MELPA Stable, GitHub Actions CI, Coveralls. CI and coverage badges are aspirational until the GitHub Actions TODO lands; their URLs are correct so they auto-populate when CI is set up. - Maintenance status: explains the fork, lists recently-fixed upstream issues, points at the GitHub mirror and Issues. - Features: bullet list of capabilities - Installation: MELPA, package-vc-install, use-package :vc, Straight, manual. Drops the stale 'tick drill in org-modules' + Org contrib references. - Quick Start: 60-second flow from install to first drill - In-Session Keys: cheat sheet table for both the question and rating phases (closes the existing #A TODO for the cheat sheet) - Configuration: most-used defcustoms with comments - Development: make-target table - History: contrib → phillord → cjennings handoff story - License pointer Closes three #A TODOs: README modernization, stale install instructions, in-session keybinding cheat sheet. Added assets/made-for-emacs-badge.svg (copied from emacs-wttrin).
Diffstat (limited to 'README.org')
-rw-r--r--README.org227
1 files changed, 227 insertions, 0 deletions
diff --git a/README.org b/README.org
new file mode 100644
index 0000000..5dd20d7
--- /dev/null
+++ b/README.org
@@ -0,0 +1,227 @@
+* Org-Drill — Spaced-Repetition Flashcards for Org Mode
+
+[[#maintenance][Maintenance Status]] | [[#features][Features]] | [[#installation][Installation]] | [[#quick-start][Quick Start]] | [[#in-session-keys][In-Session Keys]] | [[#configuration][Configuration]] | [[#development][Development]] | [[#history][History]] | [[#license][License]]
+
+[[https://www.gnu.org/software/emacs/][file:assets/made-for-emacs-badge.svg]]
+[[https://melpa.org/#/org-drill][file:https://melpa.org/packages/org-drill-badge.svg]]
+[[https://stable.melpa.org/#/org-drill][file:https://stable.melpa.org/packages/org-drill-badge.svg]]
+[[https://github.com/cjennings/org-drill/actions/workflows/ci.yml][file:https://github.com/cjennings/org-drill/actions/workflows/ci.yml/badge.svg]]
+[[https://coveralls.io/github/cjennings/org-drill?branch=main][file:https://coveralls.io/repos/github/cjennings/org-drill/badge.svg?branch=main]]
+
+Org-Drill turns Org Mode headings into flashcards and drills you on them using a spaced-repetition algorithm. You write your cards as plain Org headings, tag them =:drill:=, and =M-x org-drill= walks you through the ones that are due. Ratings (0–5) feed a scheduling algorithm (SM2, SM5, or Simple8) that spaces out future reviews.
+
+" /Memory is the residue of thought./ "
+— /Daniel Willingham/
+
+** Maintenance Status
+:PROPERTIES:
+:CUSTOM_ID: maintenance
+:END:
+
+This is a maintained fork of [[https://gitlab.com/phillord/org-drill][phillord/org-drill]]. The upstream looks abandoned (no commits in a long while, open issues sitting), so I've taken on keeping the project alive — fixing bugs, raising test coverage, modernizing. Recent work includes:
+
+- Fix for the =[Y-08-27 Wed 16:%]= timestamp shape (upstream issue #59)
+- Fix for =default-input-method= getting clobbered every drill session (upstream issues #52, #58)
+- Fix for entries whose answer lives in a child sub-heading being silently skipped (upstream issue #13)
+- Fix for cloze face leaking onto org headings (upstream issue #38)
+- Fix for "Window system frame should be used" error on TTY emacsclient (upstream issue #44)
+- Several other smaller fixes — see =git log=
+
+If you've been hitting any of those, this fork should help.
+
+*Where to get it:*
+- Primary: [[https://github.com/cjennings/org-drill][github.com/cjennings/org-drill]]
+- Issues / questions: [[https://github.com/cjennings/org-drill/issues][GitHub Issues]]
+
+** Features
+:PROPERTIES:
+:CUSTOM_ID: features
+:END:
+
+- Cards live as Org headings — no separate database, no sync hassle, your decks are just =.org= files
+- Multiple card types: simple front/back, two-sided, multi-cloze, hide-N-of-N, language-specific (verb conjugation, noun declension), and user-defined
+- Three spaced-repetition algorithms: =SM2=, =SM5= (default), =Simple8=
+- Cram mode for review sprints — drill everything, ignore schedule
+- Leitner box system as an alternative to the SM* family
+- Cloze deletion with optional hints (=[hidden||hint]=)
+- Multi-file decks via Org's agenda-files mechanism, or per-directory scope
+- Session controls: maximum duration, maximum items per session, leech detection
+- LaTeX preview, inline images, and the rest of the Org rendering machinery just work inside drill sessions
+
+** Installation
+:PROPERTIES:
+:CUSTOM_ID: installation
+:END:
+
+Requires Emacs 25.3+ and Org 9.6+. Pick whichever package manager you already use.
+
+*** MELPA + use-package
+Org-drill is on [[https://melpa.org/][MELPA]] and [[https://stable.melpa.org/#/][MELPA Stable]]. Add the following to your init file:
+
+#+begin_src emacs-lisp
+ (use-package org-drill
+ :ensure t
+ :commands (org-drill org-drill-cram org-drill-resume)
+ :bind ("C-c d" . org-drill))
+#+end_src
+
+*** package-vc-install (Emacs 29+)
+Pull straight from this fork's =main= branch:
+
+#+begin_src emacs-lisp
+ (unless (package-installed-p 'org-drill)
+ (package-vc-install "https://github.com/cjennings/org-drill"))
+#+end_src
+
+*** use-package with =:vc= (Emacs 29+)
+
+#+begin_src emacs-lisp
+ (use-package org-drill
+ :vc (:url "https://github.com/cjennings/org-drill" :rev :newest)
+ :bind ("C-c d" . org-drill))
+#+end_src
+
+*** Straight
+
+#+begin_src emacs-lisp
+ (straight-use-package
+ '(org-drill :type git :host github :repo "cjennings/org-drill"))
+#+end_src
+
+*** Manual
+Clone the repo and add it to your =load-path=:
+
+#+begin_src emacs-lisp
+ (add-to-list 'load-path "/path/to/org-drill")
+ (require 'org-drill)
+#+end_src
+
+** Quick Start
+:PROPERTIES:
+:CUSTOM_ID: quick-start
+:END:
+
+Sixty seconds from install to first drill:
+
+1. Open a new file =my-deck.org=.
+2. Paste the following and save:
+
+ #+begin_example
+ ,* What's the capital of France? :drill:
+ Paris
+ ,* What's 2 + 2? :drill:
+ 4
+ ,* What's `M-x` in Emacs? :drill:
+ :PROPERTIES:
+ :DRILL_CARD_TYPE: hide1cloze
+ :END:
+ The keystroke that runs [Execute extended command].
+ #+end_example
+
+3. =M-x org-drill=.
+
+Org-drill will show you each card, wait for you to think of the answer, and let you reveal it with any key. Rate yourself 0 (forgot) to 5 (perfect) — that rating sets when you'll see the card again.
+
+The bundled =org-drill.org= file in this repo is also a working drill deck — open it in Emacs and =M-x org-drill= to see every card type in action. =spanish.org= is another worked example, oriented at language learning.
+
+** In-Session Keys
+:PROPERTIES:
+:CUSTOM_ID: in-session-keys
+:END:
+
+While a card is shown:
+
+| Key | Action |
+|-----------+---------------------------------------|
+| =any key= | Reveal the answer |
+| =q= | Quit the session |
+| =e= | Edit the current card |
+| =s= | Skip the current card |
+| =t= | Add or remove tags on the current card |
+| =?= | Show help (rating scale + scheduler hint) |
+
+After the answer is revealed:
+
+| Key | Meaning |
+|-------+---------------------------------------------------------------|
+| =0= | Completely forgot — reset interval, mark as failed |
+| =1= | Even after seeing it, took a moment — fail |
+| =2= | After seeing it, remembered — fail (last fail-bucket rating) |
+| =3= | Took a while, but recalled — pass |
+| =4= | Recalled with a little thought — pass |
+| =5= | Recalled easily — pass |
+
+Anything 3 or higher pushes the card forward in the schedule; 0–2 sends it back. Arrow keys, =Page Up=, =Page Down=, and the mouse wheel scroll the visible card during the prompt.
+
+After a quit (=q=) or edit (=e=), resume with =M-x org-drill-resume=. Cram everything in your deck regardless of schedule with =M-x org-drill-cram=.
+
+** Configuration
+:PROPERTIES:
+:CUSTOM_ID: configuration
+:END:
+
+The most-used customization options:
+
+#+begin_src emacs-lisp
+ (use-package org-drill
+ :ensure t
+ :custom
+ ;; Default scope for `M-x org-drill'. Other choices:
+ ;; 'tree (subtree at point), 'directory, 'agenda, a list of file paths.
+ (org-drill-scope 'file)
+ ;; How long a session may run before org-drill stops queuing new items.
+ (org-drill-maximum-duration 20) ; minutes; nil for no limit
+ ;; How many items per session. nil for everything pending.
+ (org-drill-maximum-items-per-session 30)
+ ;; Spaced-repetition algorithm. Choices: 'sm2, 'sm5, 'simple8.
+ (org-drill-spaced-repetition-algorithm 'sm5)
+ ;; What to do with leech items (cards you keep forgetting).
+ ;; Choices: 'warn (show a banner), 'skip (don't drill), nil.
+ (org-drill-leech-method 'warn)
+ ;; Increase the text size during drill sessions. nil leaves it alone.
+ (org-drill-text-size-during-session 1.5))
+#+end_src
+
+The full list of defcustoms is documented inside the source — =M-x customize-group RET org-drill RET= shows them all.
+
+** Development
+:PROPERTIES:
+:CUSTOM_ID: development
+:END:
+
+The repo includes a Makefile that wraps Cask-driven test and lint flows:
+
+| Target | What it does |
+|----------------------+--------------------------------------------------------------------|
+| =make help= | List all targets |
+| =make setup= | Install development dependencies via Cask |
+| =make test= | Run the full test suite (ERT unit + robot) |
+| =make test-unit= | ERT unit tests only |
+| =make test-file FILE=…= | Run one test file |
+| =make coverage= | Generate =.coverage/simplecov.json= via undercover |
+| =make compile= | Byte-compile =org-drill.el= |
+| =make lint= | Run =checkdoc= + =package-lint= + =elisp-lint= (informational) |
+| =make validate-parens= | Quick structural check |
+| =make robot= | Window-system end-to-end tests under =robot/= |
+
+Tests live under =tests/= as ERT files. Coverage hovers around 78% on =org-drill.el= and is tracked with the =:slow= ERT tag for any genuinely-long-running tests.
+
+Issues and pull requests welcome on [[https://github.com/cjennings/org-drill][GitHub]].
+
+** History
+:PROPERTIES:
+:CUSTOM_ID: history
+:END:
+
+Org-drill started life as a contrib in Org Mode itself (when the Org repo had a =contrib/lisp/= directory), authored by [[https://github.com/eeeickythump][Paul Sexton]]. It later moved to its own [[https://gitlab.com/phillord/org-drill][GitLab repo under Phil Lord]] when Org dropped contrib. Phil's repo carried the project through several years of fixes and feature additions.
+
+This fork picks up where Phil's repo paused. I emailed phillord asking how I could help; if I don't hear back I plan to ask to take over upstream maintenance. Meanwhile bugs are getting fixed here and tests are filling in.
+
+For the deep manual — every card type, every customization, plus a working deck you can drill against to see each card-type in action — open =org-drill.org= in Emacs.
+
+** License
+:PROPERTIES:
+:CUSTOM_ID: license
+:END:
+
+GPL-3.0-or-later. See the header of =org-drill.el= for the full notice.