| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
| |
The check (<= quality org-drill-failure-quality) appeared in five
places: SM2/SM5/Simple8 schedulers, smart-reschedule, and the
main org-drill-entries loop body. Each call site does different
things on failure (reset interval, push to again-entries, etc.) so
only the predicate was duplicated.
Extracted as org-drill--quality-failed-p with a docstring naming
the threshold and the role. Five inlined comparisons collapse to
five named predicate calls.
|
| |
|
|
|
|
|
|
|
|
|
| |
The seven-line propertize+concat block that prepends a red leech
warning to the prompt was inlined in three prompt builders:
presentation-prompt-in-mini-buffer, presentation-prompt-in-buffer,
and presentation-prompt-for-string.
Extracted org-drill--maybe-prepend-leech-warning as a single helper
the three call. 21 lines duplicated → one definition + three
one-line call sites.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Four dead-code blocks deleted, all of them commented-out
alternative implementations next to the live versions:
- 5-line commented (and (>= quality 4) ...) cond branch in the
SM5 scheduler
- 6-line commented (loop do (re-search-forward ...)) alternative
in present-multicloze-hide-n
- 4-line commented unless-error guards at the top of entry-f
- 3-line commented (:tomorrow ...) case branch in
map-entry-function
Prose commentary kept (license, package overview, recent-fix
explanations). Pure deletion, no behavior change.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
org-drill-present-spanish-verb had a 6-branch cl-case where each
branch differed only in two values: which subheading to reveal
(Infinitive or English) and which prompt string to show. Inlined
into a 50-line block of nearly-identical setq calls.
Extracted the (reveal . prompt) pairs into a defconst alist and
reduced the dispatcher to a random-pick + apply-pair pattern.
Function drops from 51 lines to 14. Existing branch tests still
pass — they mock cl-random to a specific index, and the alist's
order matches the previous case order.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The quality-percentage formula
(round (* 100 (cl-count Q qualities)) (max 1 (length qualities)))
appeared six times in org-drill-final-report (once per recall
quality 0..5), each time inlined verbatim. Extracted to a single
helper.
Six call sites collapse from three lines each to one. Behavior
identical (the helper documents the (max 1 ...) divisor as an
empty-list guard). Final-report drops from 95 lines to ~80.
|
| |
|
|
|
|
|
|
|
|
|
| |
The function had an Org-version branch with a legacy <9.6 path that
used (substring (cdr org-time-stamp-formats) 1 -1). Modern Org's
format-strings dropped the angle brackets that the substring slice
assumed, so the legacy path was both dead-code (unreachable under
the org>=9.6 dep floor we just declared) and silently buggy if it
ever did run.
Function is now a one-liner around the modern primitive.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Two dead branches removed:
- (when (version< org-version "9.2") ...) advice on org-get-tags,
plus the org-drill-get-tags-advice helper that backed it. Org 9.2
shipped the new arity in 2018 — well below our org>=9.6 floor.
- (when (= 8 (car ...)) ...) Org 8.x defalias shim that wrapped
org-latex-preview around org-preview-latex-fragment. Org 8 hasn't
been a target for years and is below the org>=9.6 floor.
Both are now genuinely dead after the dep bump in 75b1601.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three large dead-code blocks removed:
- 16-line commented-out org-drill-entry-due-p (replaced by current
implementation that takes a session arg)
- 17-line commented-out org-drill-hide-all-subheadings-except (the
body was a placeholder docstring + commented body; the real
function lives elsewhere now)
- 25-line block of commented-out alternative
org-drill-add-cloze-fontification + add-hook XXX commentary
Pure deletion, no behavior change. Version control has the history.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
org-drill calls org-fold-show-entry and org-fold-show-subtree from
seven sites without fboundp guards. Both functions arrived in Org
9.6. But the package declared org 9.3 (Package-Requires) /
org 9.2 (Cask), so users on older Org would silently void-function
at runtime instead of getting a clear install-time mismatch error.
Bumped both declarations to org 9.6. Wrapping each of the seven
call sites with fboundp would be the alternative, but Org 9.6 was
released October 2022 — three-and-a-half years ago — and we already
have a follow-up TODO to drop the legacy time-to-inactive fallback
that this version bump unblocks.
Two tests verify the declared dep and that the org-fold APIs are
actually bound on the running Org version.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
User reported that running org-drill on a buffer with a new (no-ID)
entry threw 'Wrong Type Argument: hash-table-p, nil' and stopped the
scan — every subsequent entry was silently skipped, so the user had
to re-run org-drill once per item (10 items meant 10 invocations).
The exact source of the hash-table error is environment-dependent
(Emacs version, Org version, lazy org-id-locations init, Doom
overrides), so this fix targets the user-visible failure mode
instead of the underlying triggering condition.
Wrapped the per-entry body of org-drill-map-entry-function in
condition-case. An error on one entry now logs a 'skipping' message
and the scan continues to the next entry. The session collects all
the well-formed items, and the user can re-run drill once total to
process them — no more once-per-item.
Two regression tests: one verifies the resilience behavior directly
(fail entry 1, scan continues to entry 2), the other documents the
ID-creation-with-uninitialized-locations scenario as a smoke check.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The inner match was [[:cntrl:][:graph:][:space:]]+?, which silently
includes newline. A stray [ could match all the way to a ]
several lines later, covering org headings in between with the
visible-cloze face. Reporter saw lines 4 and 5 of test.org lose
their org-level-N face and use default instead.
Switched the inner class to [^\n]+?. Clozes now stay within a
single line, which matches the design intent and stops the face
bleed. Three new tests cover the regression.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Issue #44 (2021): running org-drill in a TTY emacsclient (the
reporter mentioned tmux) raised "Window system frame should be
used" because LaTeX preview helpers (org-latex-preview,
org--latex-preview-region) require a window system and weren't
guarded.
Wrapped both call sites with (when (display-graphic-p) ...).
- org-drill--show-latex-fragments: now a silent no-op on TTY
- present-default-answer's clear-and-preview block: same guard
LaTeX previews are inherently graphical. The right behavior on
TTY is to skip the preview rather than crash the session — TTY
users still see the underlying source text just fine.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a user interrupted a drill session to edit or capture, the
session's end-pos slot got set to a marker (or :quit). The end-of-
org-drill cond branched on end-pos: if set, show resume message and
skip org-drill-final-report.
That worked for the first interruption. But on org-drill-resume,
the session was reused with end-pos still carrying the prior marker.
Even when the resumed session completed normally, the same cond
branch fired again — silently skipping final-report.
Clear end-pos at the top of org-drill when resume-p is non-nil, per
Markus's proposed patch on the upstream issue. The resumed session
can now reach the final-report branch.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
org-drill--setup-display saved buffer-local state (mode-line,
variable-pitch-mode) into global defvars and called setq-local on
the current buffer. org-drill--restore-display read those globals
and ran setq-local against whatever buffer happened to be current
at restore time.
If the user switched buffers mid-session, the restore wrote to the
wrong buffer — leaving the original drill buffer's mode-line still
hidden and trampling the destination buffer's mode-line with
whatever was saved from elsewhere.
Captured the buffer at setup in org-drill--saved-display-buffer.
Restore now wraps mode-line and variable-pitch restoration in
with-current-buffer against that saved buffer. Text-scale stays
global (the underlying face attribute is process-wide).
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Issue #45 (2021): persist-load raised End of file during parsing
at persist.el:413 in some configurations, likely from a corrupted
persist data file. Pre-fix, this propagated up through the
top-level (persist-defvar org-drill-sm5-optimal-factor-matrix ...)
form at file-load time and broke the entire package's load.
Wrapped the persist-defvar form in condition-case. On failure, the
matrix falls back to a fresh nil binding via plain defvar, and a
message tells the user what happened. org-drill continues to load
normally.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Both functions bound session to org-drill-last-session and immediately
called setf / org-drill-entries-pending-p on it without checking for
nil. First-time invocation (or after Emacs restart with no active
session) threw an obscure eieio-oset / nil-slot type error instead
of a clear message.
Added (unless session (user-error ...)) at the top of each function.
A user running M-x org-drill-resume cold now sees a sensible message
telling them to run org-drill first.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
drawer-end was captured as
(save-excursion (re-search-forward ':END:' end t) (point))
which always returns a number — (point) is always defined. The
subsequent (when drawer-end ...) guard was dead, so a malformed
drawer (typo in :END:, mid-edit truncation) ended up with a junk
overlay covering whatever range point happened to land in.
Captured the search result itself and gate on it. Malformed
drawers are now skipped silently; well-formed drawers still get
their normal overlay.
|
| |
|
|
|
|
|
|
|
|
|
| |
When the property is absent, org-entry-get returns nil and
string-to-number errors with wrong-type-argument. Reachable when a
user removes the property mid-session, or when a Leitner-tagged
entry is rebox'd before its DRILL_LEITNER_BOX has been set.
Wrapped the org-entry-get with (or ... "0"). Box 0 makes the rating
semantics still sensible: a downgrade stays at 0, a promotion goes
to 1.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The card-type alist mapped translate_number to a function that no
longer exists in the file. Cards with DRILL_CARD_TYPE: translate_number
crashed with void-function during drill instead of being skipped.
Reporter (issue #43, 2021) said they had old decks using the
documented translate_number type and were getting the crash on
restore. The function was apparently removed at some point without
clearing the alist entry.
Removed the alist entry so entry-f's no-presentation-fn branch fires
and returns skip after messaging the user. Legacy decks now degrade
gracefully instead of crashing the session.
Tests in tests/test-org-drill-translate-number-regression.el lock the
behavior in (entry-f returns skip on translate_number, alist no
longer carries the entry).
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The warning branch divided 100*overdue by (dormant+due) without
guarding the denominator. When both counts are zero — degenerate
scopes (cram with no items collected, pure-failure session on empty
queues) — the call hit arith-error before the warning even rendered.
Wrapped the divisor with (max 1 ...). In the zero case the
percentage reads as 0% rather than crashing the session wrap-up.
Resolves a long-standing pre-existing TODO entry.
|
| |
|
|
|
|
|
| |
Every drilled card was logging "[debug] org-drill: at marker position N"
to *Messages* and flashing it in the minibuffer. Pure noise — the
print statement was clearly a leftover from diagnostic work that
never got cleaned up. Delete it.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The function takes `days-ahead' as &optional, but the schedule cond
called `(= 0 days-ahead)' and `(cl-minusp days-ahead)' before any
type-guard, so passing nil crashed with a wrong-type-argument error.
Today's two callers (the rating-confirmation flow and the
org-drill-relearn-item helper) always pass a number, so this was
latent — but a third caller relying on the documented &optional
shape would hit it immediately.
Switched the cond to require numberp before the value comparisons,
and the default branch now falls back to the algorithm-computed
next-interval when days-ahead is nil. That matches the intent
implied by the optional signature and the docstring.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Plus a docs fix to org-drill-order-overdue-entries' header comment.
16 ERT tests covering:
- org-drill-entry-status: non-drill nil, empty entry nil, virgin :new,
future :future, low-quality :failed, due+short-interval :young,
due+long-interval :old, very-overdue :overdue, skipped-leech
:unscheduled, three-element return shape
- org-drill-entry-days-since-creation: with DATE_ADDED, missing without
flag (nil), missing with use-last-interval-p flag (overdue+interval)
- org-drill-order-overdue-entries: empty stays empty, non-lapsed
sorted by DUE desc, lapsed split (by DUE crossing threshold, not AGE)
appearing after sorted by AGE desc
Fixed misleading header comment at line 2888 — it claimed the lapse
split was by AGE, but the code uses DUE (cl-second). This matches
the semantic gate in org-drill--entry-lapsed-p, so the code was
right and the comment was stale. Updated the comment to state the
actual three-step sort.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
org-drill-hide-cloze-hints checked (null (match-beginning 2)) to detect
"no hint present," but the cloze regex's hint group is an empty-allowed
alternation — the group always participates in the match, so
match-beginning is always a position, never nil.
For a card like "[Paris]" (no hint), the function fell through to
org-drill-hide-region with start = end and made a zero-width overlay.
Cosmetically harmless but accumulates one stray overlay per hint-less
cloze. On a buffer with many such cards the tracking cost is real.
Switched the guard to (= (match-beginning 2) (match-end 2)) — empty match.
Found while writing tests; locked in by tests/test-org-drill-hide-show.el's
test-org-drill-hide-cloze-hints-no-hint-no-overlay.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
kqr (2019-07-22) reported that drill entries whose answer lives inside a child sub-heading were silently skipped. Their example: a question in the heading text and the answer under `** The Answer`. The function returned t (empty) for such entries, so they never got presented during drill sessions.
The cause is `(outline-next-heading)` in `org-drill-entry-empty-p`. That primitive lands on the first heading at any level, including children. So the search range was metadata-end up to the child's heading line, which excluded the child's body. Bodies that lived in child sub-headings never got searched.
I switched the bound to `(org-end-of-subtree t t)`, which covers the whole subtree of the current heading and degrades gracefully at the last heading in the buffer. The reporter suggested `outline-forward-same-level`, but that primitive errors at the last sibling, which would be its own regression. `org-end-of-subtree` is the canonical Emacs idiom for this kind of bound and handles end-of-buffer correctly.
I added `tests/test-org-drill-entry-empty-p.el` with 6 ERT tests across Normal, Boundary (kqr's exact fixture), and edge categories. The two regression tests fail at HEAD before the fix and pass after.
One semantic note worth flagging: any subtree content now counts as non-empty, including bare child headings with no body of their own. The bug report is silent on that case and I expect it to be rare in practice. If anyone reports the new behavior as a regression, the fix would be to filter heading lines out of the graphical-character search.
|
| |
|
|
|
|
|
|
|
|
| |
Two reports from breadncup (issue #52 in 2023, issue #58 in 2024) said that running an org-drill session silently nulled out their `default-input-method`. The reproduction is exact: every rating prompt clears the user's persistent setting.
The cause is `(set-input-method nil)` in `org-drill--read-key-sequence`. When `current-input-method` is nil, calling `set-input-method` with nil clears `default-input-method` as a documented side effect. The unwind-protect on the way back has the symmetric problem, since it passes the captured nil. The fix is to use the primitives that are scoped to current state. `deactivate-input-method` and `activate-input-method` don't touch `default-input-method`, and I wrap each call in a guard so the function is a no-op when no input method is active.
The same pattern lives in `org-drill-response-get-buffer-create`, which propagates the caller's input method into the response buffer. When the caller has no input method active, the captured value is nil and `(set-input-method nil)` runs in the new buffer, clearing `default-input-method` again. I applied the same guard there.
I added `tests/test-org-drill-read-key-sequence.el` with 6 ERT tests across Normal, Boundary (the bug case), and Error categories. The four regression tests fail at HEAD before the fix and pass after.
|
| |
|
|
|
|
|
|
| |
The Simple8 failure branch was missing (cl-incf totaln) while SM2 and SM5 both increment total-repeats on failure. After this change, DRILL_TOTAL_REPEATS counts every review attempt regardless of which scheduling algorithm produced it, including failures.
Going-forward only. Historical totaln values for Simple8 failures stay under-counted by one. Correct counting starts with the next failed review.
Paired with the test commit 5c68f1e, which captured the new expected behavior first. Full suite at 214 of 214.
|
| |
|
|
| |
(cherry picked from commit eacb6d0c018839d8207ee80e02b46b314278ac3f)
|
| |
|
|
| |
(cherry picked from commit 76d45fb0ea6e216b2cb173bdcf73ef284d350ff8)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
org-drill-entry-days-since-creation
Wrapped org-time-stamp-to-now call in condition-case to gracefully handle
malformed DATE_ADDED property values. Now returns nil instead of crashing
when encountering invalid timestamp formats.
Changes:
- Added condition-case around org-time-stamp-to-now (lines 2896-2898)
- Returns nil on error, allowing the function to fall through to other
branches or return nil gracefully
This prevents unhandled errors in long-running sessions when drill entries
have corrupted or manually-edited timestamp values.
|
| |
|
|
|
|
|
|
|
|
| |
Changed incorrect property names to match standard naming convention:
- LAST_QUALITY → DRILL_LAST_QUALITY (lines 3394-3395)
- LAST_REVIEWED → DRILL_LAST_REVIEWED (lines 3397-3398)
This ensures consistency with the rest of the codebase where all drill
properties use the DRILL_ prefix. The old names would create properties
that don't match the standard schema and wouldn't be read correctly.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Created org-drill-lapse-threshold-days defcustom (default 90) to replace
hardcoded values scattered throughout the code. This improves maintainability
and allows users to customize when entries are considered lapsed.
Changes:
- Added defcustom org-drill-lapse-threshold-days (line 660-669)
- Updated org-drill-order-overdue-entries to use variable (line 2867)
- Simplified org-drill--entry-lapsed-p to use variable (line 2884-2886)
- Added safe-local-variable declaration (line 687)
- Updated docstring references to use variable name
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaced switch-to-buffer with with-current-buffer to avoid changing
visible buffers during merge operation. This prevents window state
corruption and allows the function to work correctly in batch mode.
Changed line 3374-3375 from:
(save-excursion
(switch-to-buffer (marker-buffer marker))
...)
To:
(with-current-buffer (marker-buffer marker)
(save-excursion
...))
|
| |
|
|
|
|
|
|
| |
Removed commented-out code that redundantly set the failures variable.
The failures count is already obtained from org-drill-entry-failure-count
on line 1538, making the commented code (lines 1548-1550) unnecessary.
This cleans up maintainability issues and removes confusing dead code.
|
| |
|
|
|
|
|
|
|
|
|
| |
Previously used (or (cdr (org-get-property-block)) (point)) which could
return invalid position if no property block exists. Now properly positions
after heading and metadata using org-end-of-meta-data when property block
is missing.
Affects:
- org-drill-present-multicloze-hide-n (line 2267)
- org-drill-present-multicloze-hide-nth (line 2345)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Timer cleanup fix:
- Wrapped recursive-edit in unwind-protect to ensure
org-drill-presentation-timer-cancel is always called
- Timer is now cancelled even if recursive-edit exits abnormally
Marker leak fix:
- Moved org-drill-free-markers outside the (unless (oref session end-pos)) condition
- Done-entries markers are now always freed in cleanup, even on error or suspension
- Prevents memory leaks in long-running Emacs sessions
Fixes two severity B bugs in todo.org
|
| |
|
|
|
|
|
| |
Changed 'dasy' to 'days' and improved docstring to follow Emacs conventions
(imperative mood: 'Return non-nil' instead of 'Returns true').
Fixes severity B bug in todo.org
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added safety counter to prevent infinite loop when all pending entries
are invalid (deleted or no longer have drill tag).
Changes:
- Added attempts counter with max-attempts limit of 1000
- Loop now exits if max attempts reached
- Returns nil if no valid entry found after exhausting attempts
Impact: Prevents infinite loop if all pending entries become invalid,
which could happen if entries are deleted or tags are removed during
a session.
Fixes severity B bug in todo.org
|
| |
|
|
|
|
|
|
|
| |
Added check to ensure last-interval is greater than 0 before performing division.
Impact: Prevents division-by-zero error when last-interval is 0 (new items
or after failures), which would crash the drill session.
Fixes severity B bug in todo.org
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added fallback to original function when org-get-local-tags doesn't exist.
Changes:
- Removed underscore from orig-fun parameter (now used)
- Added else clause to fallback to (apply orig-fun args)
- Added explanatory comment
Impact: In older org-mode versions where org-get-local-tags doesn't exist,
the function now properly falls back to the original org-get-tags behavior
instead of returning nil, fixing tag functionality.
Fixes severity A bug in todo.org
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaced unsafe use of read() function on user-controlled property values
to prevent arbitrary code execution vulnerability.
Changes:
- Lines 1353, 1406: Changed read() to string-to-number() for DRILL_CARD_WEIGHT
- Line 2838: Changed read() to string-to-number() for DRILL_LAST_INTERVAL
- Line 1068: Created org-drill--safe-read-learn-data() helper function that:
* Uses read-from-string instead of read
* Validates input is a list with at least 3 numeric elements
* Returns nil on invalid/malicious input with error handling
* Falls back to safe defaults if LEARN_DATA is corrupted
Impact: Prevents arbitrary code execution if attacker controls org-mode
properties through shared files or malicious imports.
Fixes severity A security bug in todo.org
|
| |
|
|
|
|
|
|
| |
Changed :documementation to :documentation in EIEIO class slot definition.
This fixes EIEIO's ability to recognize slot documentation for introspection
and help systems.
Fixes severity A bug in todo.org
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit modernizes the test infrastructure and eliminates all
compilation warnings to prepare for comprehensive test coverage.
Test Infrastructure Improvements:
- Reorganize tests from test/ to tests/ directory (standard convention)
- Modernize Makefile with patterns from chime.el
- Add convenient test targets (test-file, test-name)
- Support unit and integration test separation
- Better help documentation with examples
- Auto-detect Cask installation location
- Add comprehensive test-strategy.org document
- 6-week implementation plan
- Critical function prioritization
- Integration test scenarios
- Coverage goals (80% target)
Compiler Warning Fixes (org-drill.el):
- Replace obsolete org-mode functions:
- org-show-subtree → org-fold-show-subtree
- org-show-entry → org-fold-show-entry
- org-get-tags-at → org-get-tags
- org-remove-latex-fragment-image-overlays → org-clear-latex-preview
- org-toggle-latex-fragment → org-latex-preview
- org-bracket-link-regexp → org-link-bracket-re
- Fix ~31 unescaped single quotes in docstrings (use \=')
- Remove unused lexical variables (cb, drawer-name, session, orig-fun)
- Remove obsolete outline-view-change-hook binding
- Wrap org 8.x compatibility shim in with-no-warnings
- Fix long docstring at line 1085
Test Status:
- All 3 existing tests passing
- Zero compilation warnings (was ~40 warnings)
- Ready for Phase 1 implementation (foundation tests)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add built-in display management for drill sessions with user-configurable
settings. No external dependencies required.
New features:
- Customizable font size in points (org-drill-text-size-during-session)
- Optional variable-pitch mode (org-drill-use-variable-pitch)
- Optional modeline hiding (org-drill-hide-modeline-during-session)
- Automatic drawer hiding with new org-drill-hide-drawers function
- Session lifecycle hooks (org-drill-before-session-hook, org-drill-after-session-hook)
Display settings are automatically saved and restored when sessions end,
including on quit, error, or normal completion via unwind-protect.
All settings use proper package naming (org-drill-*) with no external
dependencies. Works out of the box for all users.
|
| |
|
|
|
|
|
|
|
| |
Replace `org-cycle-hide-drawers` with a new `org-drill-hide-drawers`
function for more reliable drawer hiding in org-drill. This change
enhances the drill display by ensuring all drawers, including the
PROPERTIES drawer, are consistently hidden during presentations. The
custom function iterates through entries and hides the designated
regions, improving the user experience during interactive sessions.
|
| | |
|
| |\
| |
| |
| |
| |
| | |
Bump org-mode version to 9.3
See merge request phillord/org-drill!10
|
| | |
| |
| |
| |
| |
| | |
Issue reference: https://gitlab.com/phillord/org-drill/-/issues/19
Caused by https://gitlab.com/phillord/org-drill/-/commit/82b50e378db69e96fb3d916785a2f03fddf85637, which introduced a function created here: https://code.orgmode.org/bzg/org-mode/commit/6d9022df22f86e8b0ea00dfb9179128136edc49a?style=split. Fn is available in org 9.3. Don't know much about packaging for melpa but I figure 82b50e37 should have bumped the org version from 9.2.X at least.
|
| |\ \
| | |
| | |
| | |
| | |
| | | |
Allow Creating New Session in Cram Mode
See merge request phillord/org-drill!9
|
| | |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A current session does not exist when `org-drill-cram` is called, so
it's current behavior of toggling the `crame-mode` property doesn't
seem to do anything. This change allows it to inform `org-drill` to
create a new session in "cram mode."
I'm not sure if this is the proper way to impliment this relative to
the rest of the codebase, which I'm still a little unfamiliar
with. But I thought this pr would still be useful, if only to create discussion.
|