<feed xmlns='http://www.w3.org/2005/Atom'>
<title>org-drill/org-drill.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-31T15:46:18+00:00</updated>
<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>feat: add org-drill-treat-headline-as-card-p for empty-bodied cards</title>
<updated>2026-05-31T11:53:06+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-31T11:53:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=bafa281b9c0b3ccc78b4a8420a817662d50ca86f'/>
<id>urn:sha1:bafa281b9c0b3ccc78b4a8420a817662d50ca86f</id>
<content type='text'>
A drill entry with an empty body is skipped unless its card type opts into empty bodies via the DRILL-EMPTY-P slot of org-drill-card-type-alist. That left no global way to drill headline-only items, or hierarchical-notes decks where the heading is the question and the answer lives in child entries (upstream #30, #41).

I added org-drill-treat-headline-as-card-p, default nil so existing decks are unchanged. When it's on, the empty-skip gate in org-drill--entry-empty-and-not-empty-friendly-p short-circuits, so every empty-bodied entry is drilled with its heading as the question regardless of card type. I added the safe-local-variable booleanp declaration alongside the other booleans and documented the switch in org-drill.org.

Tests pin the predicate and the classify-status outcome both on and off, and confirm the per-card-type DRILL-EMPTY-P path stays independent of the new switch.
</content>
</entry>
<entry>
<title>Add support for typing in buffer input</title>
<updated>2019-01-15T20:30:10+00:00</updated>
<author>
<name>phillord</name>
<email>phillord@16dcompl012</email>
</author>
<published>2019-01-15T20:30:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=d9ffa4b91fb5e411a755533f1964ac66d63ca5b0'/>
<id>urn:sha1:d9ffa4b91fb5e411a755533f1964ac66d63ca5b0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>New global variable 'org-drill-match'. Now possible to specify a tags/property/</title>
<updated>2013-03-04T23:55:05+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2013-03-04T23:55:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=eb95d9415a75ba5aacab8837902aa46bc8c2c66e'/>
<id>urn:sha1:eb95d9415a75ba5aacab8837902aa46bc8c2c66e</id>
<content type='text'>
todo match for a drill session - only entries satisfying that match will be
considered. Top level functions now accept match string as an additional
optional argument.

DRILL_CARD_TYPE is now inherited, i.e. if a drill entry does not specify
a card type then the type will be sought further up the tree.

cl.el is required on load as well as compilation.
Use cl-flet instead of "obsolete" flet.

Fixed some documentation typos.
</content>
</entry>
<entry>
<title>Changed permissions on some files.</title>
<updated>2012-09-04T22:52:05+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2012-09-04T22:52:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=e43199b988fe06148d44d7acf56b11ad83818686'/>
<id>urn:sha1:e43199b988fe06148d44d7acf56b11ad83818686</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Entries in 'org-drill-card-type-alist' can now take a fourth argument, 'drill-empty-p' (boolean). If true, items of this type are not skipped if their bodies are empty.</title>
<updated>2012-09-04T22:46:16+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2012-09-04T22:46:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=6be323d0335245c47392fd3671dd781b3e4b2d81'/>
<id>urn:sha1:6be323d0335245c47392fd3671dd781b3e4b2d81</id>
<content type='text'>
Bugfixes related to cram mode.
Cram mode displays a coloured 'C' in the mode line.
Sped up testing whether items have empty bodies.
Updated documentation.
</content>
</entry>
<entry>
<title>- Improved progress bar while collecting due items. It is no longer able to overflow</title>
<updated>2011-06-30T21:18:25+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-06-30T21:18:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=8618a532c78fbdc7becc0b3c34c3bb1a027d75cb'/>
<id>urn:sha1:8618a532c78fbdc7becc0b3c34c3bb1a027d75cb</id>
<content type='text'>
  to multiple lines.
- Added documentation for 'org-drill-sm5-initial-interval'.
</content>
</entry>
<entry>
<title>Renamed documentation file and fixed a few typos.</title>
<updated>2011-05-20T12:10:16+00:00</updated>
<author>
<name>eeeickythump</name>
<email>devnull@localhost</email>
</author>
<published>2011-05-20T12:10:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/org-drill/commit/?id=e7ffd8e6eb290bd2053e100a483ddd9e012dcb33'/>
<id>urn:sha1:e7ffd8e6eb290bd2053e100a483ddd9e012dcb33</id>
<content type='text'>
</content>
</entry>
</feed>
