From 718775cdf2baf7b6a2ed09edaa07d5684d47c4a9 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 5 May 2026 05:29:05 -0500 Subject: fix: keep cloze regex within a single line (upstream #38) 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. --- org-drill.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'org-drill.el') diff --git a/org-drill.el b/org-drill.el index 6885791..b628695 100644 --- a/org-drill.el +++ b/org-drill.el @@ -231,10 +231,17 @@ Mature items are due for review, but are not new." "Delimiter in cloze expression for hints.") (defun org-drill--compute-cloze-regexp () - "Return a regexp that detects clozes." + "Return a regexp that detects clozes. + +The inner match is constrained to non-newline characters so a cloze +stays within one line. An older version used +`[[:cntrl:][:graph:][:space:]]' which silently included newline, +letting a stray `[' match all the way to a `]' several lines later +and bleeding the cloze face onto intervening org headings (upstream +issue #38)." (concat "\\(" (regexp-quote org-drill-left-cloze-delimiter) - "[[:cntrl:][:graph:][:space:]]+?\\)\\(\\|" + "[^\n]+?\\)\\(\\|" (regexp-quote org-drill-hint-separator) ".+?\\)\\(" (regexp-quote org-drill-right-cloze-delimiter) -- cgit v1.2.3