aboutsummaryrefslogtreecommitdiff
path: root/org-drill.el
Commit message (Collapse)AuthorAgeFilesLines
* refactor: remove obsolete commented code for failure countCraig Jennings2025-11-131-3/+0
| | | | | | | | 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.
* fix: improve error handling for empty property blocks in cloze processingCraig Jennings2025-11-131-4/+18
| | | | | | | | | | | 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)
* Fix race condition with timer cleanup and marker leakCraig Jennings2025-11-131-13/+16
| | | | | | | | | | | | | | 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
* Fix docstring typo and style in org-drill-entry-overdue-pCraig Jennings2025-11-131-1/+1
| | | | | | | 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
* Fix potential infinite loop in marker selectionCraig Jennings2025-11-131-5/+12
| | | | | | | | | | | | | | | | 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
* Fix potential division by zero in org-drill-entry-overdue-pCraig Jennings2025-11-131-0/+1
| | | | | | | | | 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
* Fix missing return value in org-drill-get-tags-adviceCraig Jennings2025-11-131-2/+5
| | | | | | | | | | | | | | | 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
* Security: Replace unsafe read() calls with safer alternativesCraig Jennings2025-11-131-12/+37
| | | | | | | | | | | | | | | | | | | 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
* Fix typo in cram-mode slot documentationCraig Jennings2025-11-131-1/+1
| | | | | | | | 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
* refactor: Improve test infrastructure and fix all compiler warningsCraig Jennings2025-11-131-73/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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)
* feat: Add display management with customizable settingsCraig Jennings2025-11-121-0/+90
| | | | | | | | | | | | | | | | | | 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.
* org-drill: Implement custom drawer hiding functionCraig Jennings2025-11-121-12/+27
| | | | | | | | | 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.
* Fix autoloadsPhillip Lord2021-04-271-0/+3
|
* Merge branch 'branweb/org-mode-version' into 'master'Phillip Lord2020-04-121-1/+1
|\ | | | | | | | | | | Bump org-mode version to 9.3 See merge request phillord/org-drill!10
| * Bump org-mode version to 9.3Brandon Webster2020-04-051-1/+1
| | | | | | | | | | | | 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.
* | Merge branch 'branweb/fix-cram-mode' into 'master'Phillip Lord2020-04-121-5/+8
|\ \ | | | | | | | | | | | | | | | Allow Creating New Session in Cram Mode See merge request phillord/org-drill!9
| * | Allow Creating New Session in Cram ModeBrandon Webster2020-04-051-5/+8
| |/ | | | | | | | | | | | | | | | | | | | | 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.
* / Fix use of cl.elPhillip Lord2020-04-081-1/+1
|/ | | | | | * org-drill.el (org-drill-order-overdue-entries): Use cl-first Closes #23
* Release v2.7.02.7.0Phillip Lord2020-02-161-1/+1
|
* Remove interactive from org-drill-entry-fPhillip Lord2020-02-161-1/+0
|
* Fix typo "Eaqch" to "Each"James Miller2020-01-181-1/+1
|
* Merge branch 'master' into 'fix/latex-overlays'Phillip Lord2019-12-191-1/+1
|\ | | | | | | | | # Conflicts: # org-drill.el
| * fix argument passed to now obsoleted org-toggle-latex-fragmentDarrell Overbay2019-08-071-1/+1
| | | | | | | | | | | | The interpretation of the argument to org-toggle-latex-fragment changed when it was aliased to org-latex-preview. Regardless, '(16) should work for either version
* | Show latex overlays in simple card's answerMark Skilbeck2019-10-181-0/+7
| |
* | Do not remove overlays after finishing cardMark Skilbeck2019-10-181-2/+1
| |
* | Show LaTex overlays after clearing themMark Skilbeck2019-10-161-1/+1
|/
* Fix org-get-tags compatabilityPhillip Lord2019-07-271-1/+3
| | | | | | The <9.2 compatability advice was working incorrectly by calling `org-get-tags` which prior to 9.2 returned only local tags. This now calls `org-get-tags-at` which seems to work.
* Remove obsolete org-drill-optimal-factor-matrixPhillip Lord2019-07-271-17/+0
|
* Update documentationPhillip Lord2019-07-271-6/+7
|
* Update documentationPhillip Lord2019-07-271-44/+45
|
* Update documentation.Phillip Lord2019-07-271-1/+15
|
* Update documentationPhillip Lord2019-07-261-0/+2
|
* Update documentationPhillip Lord2019-07-221-0/+13
|
* Update documentationPhillip Lord2019-07-211-0/+2
|
* Merge branch 'fix/drill-matching' into 'master'Phillip Lord2019-07-211-1/+1
|\ | | | | | | | | | | fix reversed member arguments See merge request phillord/org-drill!2
| * fix reversed member argumentsDarrell Overbay2019-07-181-1/+1
| |
* | Update documentationPhillip Lord2019-07-201-5/+12
|/
* Update documentationPhillip Lord2019-07-131-2/+11
|
* Update documentationPhillip Lord2019-07-111-0/+5
|
* Update documentationPhillip Lord2019-07-111-0/+7
|
* Add documentationPhillip Lord2019-07-101-4/+9
|
* Remove org-drill-free-markerPhillip Lord2019-07-101-7/+4
| | | | This function saves no typing once namespaced
* Remove unused variablePhillip Lord2019-07-081-4/+2
|
* Use persistPhillip Lord2019-07-081-20/+4
|
* Update variable documentationPhillip Lord2019-06-301-4/+11
|
* Regularize white spacePhillip Lord2019-06-301-166/+3
|
* Document explainerPhillip Lord2019-06-291-2/+1
|
* Regularize use of scopePhillip Lord2019-06-291-15/+19
|
* Fix promptPhillip Lord2019-06-291-1/+1
|
* Remove savehist dependencyPhillip Lord2019-06-251-13/+14
| | | | | savehist involves switching on a minor mode which does not seem optimal.