<feed xmlns='http://www.w3.org/2005/Atom'>
<title>org-drill/README.org, branch main</title>
<subtitle>Spaced-repetition flashcards for Org Mode
</subtitle>
<id>https://git.cjennings.net/org-drill/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/org-drill/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/'/>
<updated>2026-05-31T16:11:17+00:00</updated>
<entry>
<title>docs: fix README default-scheduler marker (simple8, not SM5)</title>
<updated>2026-05-31T16:11:17+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-31T16:11:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=37df84a462378636f6528970e95187c3a86f8f3e'/>
<id>urn:sha1:37df84a462378636f6528970e95187c3a86f8f3e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add statistics dashboard CSV export and docs</title>
<updated>2026-05-31T15:46:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-31T15:46:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=27385697fbf60e3319a598bb509197f5579c9405'/>
<id>urn:sha1:27385697fbf60e3319a598bb509197f5579c9405</id>
<content type='text'>
org-drill-statistics-export-csv, bound to e in the dashboard and now implemented, writes three files into a chosen directory honoring the active scope and range: sessions.csv (one row per recorded session), cards.csv (one row per drill card in scope with its scheduling properties and computed status), and daily.csv (per-day reviews, passes, fails, pass percent, and duration). Fields are quoted per RFC 4180 by a small csv-quote helper, since csv-mode isn't a dependency. This is the dashboard's last piece, step 3 of the spec.

The row builders for the three views are pure and unit-tested with deterministic fixtures, and csv-quote covers the comma, quote, and newline cases. I documented the dashboard and the export in org-drill.org (a new section with the keymap, the CSV columns, and the settings table) and added a feature bullet to the README.

I also removed the now-redundant declare-function forward reference for export-csv. It named this file as the source, so once the real defun landed the byte-compiler counted the function twice and warned.
</content>
</entry>
<entry>
<title>docs: revert intro paragraph; drop personal email mention from history</title>
<updated>2026-05-05T15:23:37+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T15:23:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=60b2666080bff6fa6769be23f157c61147e08568'/>
<id>urn:sha1:60b2666080bff6fa6769be23f157c61147e08568</id>
<content type='text'>
Two README fixes:

- Restored the original three-sentence intro paragraph.  Misread an
  earlier instruction and removed the wrong second sentence.
- Removed the line about emailing phillord and a possible
  maintainer takeover from the History section.  That's a personal
  outreach detail that doesn't belong in a public README.
  Rephrased the surrounding paragraph to focus on what's happening
  in this fork rather than the maintainer-handoff plans.
</content>
</entry>
<entry>
<title>docs: tighten README intro and link org-drill.org references</title>
<updated>2026-05-05T15:21:11+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T15:21:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=36cc02289290de75ad6a9db7b50c14c2bdec9264'/>
<id>urn:sha1:36cc02289290de75ad6a9db7b50c14c2bdec9264</id>
<content type='text'>
Removed the second sentence of the intro paragraph and rephrased the
remaining text into a compact two-sentence opener focused on what
org-drill is and how scheduling works.

Both occurrences of org-drill.org in the README are now relative
file: links so a reader on GitHub can click through to the manual.
</content>
</entry>
<entry>
<title>docs: rewrite README as a slim modernized front-door</title>
<updated>2026-05-05T15:10:30+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T15:10:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=6bb7f9b91304847d92222bf25ca6021fd82d468d'/>
<id>urn:sha1:6bb7f9b91304847d92222bf25ca6021fd82d468d</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>Removed old doc files (renamed).</title>
<updated>2011-05-20T12:10:34+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-05-20T12:10:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=1c77d6cf3ace2de1e9c6b7b6f53ec2a93935ee6a'/>
<id>urn:sha1:1c77d6cf3ace2de1e9c6b7b6f53ec2a93935ee6a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>- New card types: show2cloze, hide1_firstmore, show1_firstless, show1_lastmore. See docs for details.</title>
<updated>2011-05-20T11:22:18+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-05-20T11:22:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=b17bf579bd1ab9b3efc9c19a26e3efc59845fce3'/>
<id>urn:sha1:b17bf579bd1ab9b3efc9c19a26e3efc59845fce3</id>
<content type='text'>
- 'conjugate' card type can now show a hint (VERB_INFINITIVE_HINT)
- New command: org-drill-again: run another drill session using leftover items from the last
  session, i.e. don't rescan the item collection.
- If org-drill-resume is called and there is nothing to resume, offer to call org-drill-again
- Automatically prompt to save all modified buffers when a drill session finishes (turn off with
  'org-drill-save-buffers-after-drill-sessions-p')
- Politely skip cards with unknown card types
- When suspending a drill session, print a message describing the key that runs org-drill-resume
  (it it's bound to a key)
- org-drill-merge-buffers: can now optionally be prevented from copying unmatched items from
  SRC into DEST
- org-drill-merge-buffers: fixed a bug where it prompted for certain property values if they were
  not set in the item being processed
- org-drill-merge-buffers: ensure that *all* items in DEST are stripped of their scheduling data
</content>
</entry>
<entry>
<title>New file-safe user variable: org-drill-scope. Allows customisation of the scope of drill sessions</title>
<updated>2011-05-11T22:36:28+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-05-11T22:36:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=65e12900233c3665f952653df892cb003b11091a'/>
<id>urn:sha1:65e12900233c3665f952653df892cb003b11091a</id>
<content type='text'>
(ie where items are sourced from). The variable can take the value 'directory', meaning items
will be sourced from all org files in the same directory as the current file. This is useful
for splitting up a monolithic item collection into smaller files, while still including all
those files in drill sessions.

The values of the SCOPE argument to org-drill have changed slightly. Possible values are the same
as those for 'org-drill-scope'.
- 'file' now means current file/buffer, respecting restrictions (default, same as old 'nil')
- 'file-no-restriction' means current file, ignoring (overriding) restrictions (same as old 'file')
- new value 'directory' (see above)
- other values have the same meaning as before.
</content>
</entry>
<entry>
<title>- All drill items now receive unique IDs (using the org-id module). This allows</title>
<updated>2011-05-10T04:52:23+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-05-10T04:52:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=0aeff8516d30ce8b29865db8ce4c40803157d75d'/>
<id>urn:sha1:0aeff8516d30ce8b29865db8ce4c40803157d75d</id>
<content type='text'>
  various clever tricks such as 'synching' the item collections of two
  people. At the beginning of a drill session, IDs are assigned automatically
  to all drill items that do not possess them. This is slow if you have a large
  collection, but it only happens once.
- New command 'org-drill-merge-buffers'. Called from buffer A, and given buffer
  B, imports all the user-specific scheduling data from B into A, overwriting
  any such information in A. Matching items are identified by their ID. Any
  items in B that do not exist in A are copied to A.  A scenario where this
  could be useful:
  * Tim decides to learn Swedish using an item collection (org file) made
     publically available by Jane.  (Before publishing it Jane used
     'org-drill-strip-all-data' to remove her personal scheduling data from the
     collection.)  A few weeks later, Jane updates her collection, adding new
     items and revising some old ones. Tim downloads the new collection and
     imports his progress from his copy of the old collection, using
     'org-drill-merge-buffers'. He can then discard his old copy. Any items HE
     added to HIS copy of the old collection will not be lost -- they will be
     appended to his copy of the new collection.
- Instead of overdue items being reviewed in a completely random order, they
  are now ordered by the number of days overdue, so that the most overdue items
  are seen first. When two items are the same number of days overdue, then the
  order is random.
- slightly adjusted how 'random noise' is applied to intervals, to give wider
  spread
- we now use the port of the Common Lisp random number generator, in cl.el,
  instead of emacs' builtin RNG
- Random number generator is now reseeded using system time at the beginning of
  each drill session.
- Hints inside clozed text areas are now invisible during drill sessions if the
  clozed text is not itself being hidden, ie if your card contains
  [Moscow|Russian city] you will only see [Moscow] in the answer.
- The '...' is now shown after the hint text rather than before it,
  i.e. '[Russian city...]'. You can override this by actually including '...'
  in the hint itself.
- The minibuffer prompt now displays the card 'type' for testing purposes, as a
  single letter: N=new, Y=young, o=old, !=overdue, F=failed
- New card type: hide2cloze (hides exactly 2 randomly chosen areas of clozed
  text)
</content>
</entry>
<entry>
<title>- Added new example card types, more useful than 'spanish_verb':</title>
<updated>2011-04-30T04:47:42+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-04-30T04:47:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=c27d9035ef5ba5120157649cbfc8e0587ab4a08c'/>
<id>urn:sha1:c27d9035ef5ba5120157649cbfc8e0587ab4a08c</id>
<content type='text'>
  - 'conjugate': retrieves properties VERB_INFINITIVE and VERB_TRANSLATION
    from parent item, and uses its own property VERB_TENSE to prompt the
    student 'Translate the verb INFINITIVE and conjugate for the TENSE tense'
    or 'Give the verb meaning TRANSLATION and conjugate for the TENSE tense'
  - 'translate_number': using third party library spell-number.el,
    prompt the student to translate a random number to or from a non-English
    language (the library can handle numerous languages)
  - examples of both in spanish.org
- org-drill-card-type-alist can now take a second function name, for
  controlling how the ANSWER is displayed
- items can have weights (DRILL_CARD_WEIGHT). The interval is divided by
  the weight when scheduling, so eg an item with a weight of 2.0 will be
  tested twice as often as a normal item.
- New command: org-drill-tree. Same as org-drill using 'tree' argument.
- New command: org-drill-strip-data: deletes all scheduling data from
  every item in scope. Intended for use if you wish to share your item
  library with someone else.
- Fixed bug in simple8 algorithm where items failed on their first review
  were not having intervals reset
- Ensure all markers are freed before starting a new drill session.
</content>
</entry>
</feed>
