diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-05 05:26:44 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-05 05:26:44 -0500 |
| commit | fd658b166a8dcf716c82cca28f370990a9df83af (patch) | |
| tree | 33dba19d419831a0743779b14fd19b8aaa70d7a5 | |
| parent | bac40a5dbc241cab055f92431a80b7971896fde4 (diff) | |
| download | org-drill-fd658b166a8dcf716c82cca28f370990a9df83af.tar.gz org-drill-fd658b166a8dcf716c82cca28f370990a9df83af.zip | |
fix: skip LaTeX preview on TTY frames (upstream #44)
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.
| -rw-r--r-- | org-drill.el | 28 | ||||
| -rw-r--r-- | tests/test-org-drill-tty-safe.el | 49 |
2 files changed, 67 insertions, 10 deletions
diff --git a/org-drill.el b/org-drill.el index 6872d29..6885791 100644 --- a/org-drill.el +++ b/org-drill.el @@ -2261,13 +2261,16 @@ RESCHEDULE-FN is the function to reschedule." (ignore-errors (org-display-inline-images t)) (org-drill-hide-drawers) - (org-clear-latex-preview) - (save-excursion - (org-mark-subtree) - (let ((beg (region-beginning)) - (end (region-end))) - (org--latex-preview-region beg end)) - (deactivate-mark)) + ;; LaTeX preview helpers require a window-system frame + ;; (upstream issue #44). Skip on TTY. + (when (display-graphic-p) + (org-clear-latex-preview) + (save-excursion + (org-mark-subtree) + (let ((beg (region-beginning)) + (end (region-end))) + (org--latex-preview-region beg end)) + (deactivate-mark))) (org-drill-with-hidden-cloze-hints (funcall reschedule-fn session)))))) @@ -2285,9 +2288,14 @@ RESCHEDULE-FN is the function to reschedule." (org-drill-hide-subheadings-if 'org-drill-entry-p)))))) (defun org-drill--show-latex-fragments () - "Show latex fragment." - (org-clear-latex-preview) - (org-latex-preview '(16))) + "Show LaTeX fragments as inline images. +No-op on TTY frames — `org-latex-preview' requires a window system +and otherwise raises \"Window system frame should be used\" (upstream +issue #44, 2021). The TTY user just doesn't see preview images, +which is the right behavior." + (when (display-graphic-p) + (org-clear-latex-preview) + (org-latex-preview '(16)))) (defun org-drill-present-two-sided-card (session) (org-drill-with-hidden-comments diff --git a/tests/test-org-drill-tty-safe.el b/tests/test-org-drill-tty-safe.el new file mode 100644 index 0000000..7ec5cf2 --- /dev/null +++ b/tests/test-org-drill-tty-safe.el @@ -0,0 +1,49 @@ +;;; test-org-drill-tty-safe.el --- Regression for TTY/no-window-system error -*- lexical-binding: t; -*- + +;;; Commentary: +;; Upstream issue #44 (2021-10). Running org-drill in a TTY emacsclient +;; (e.g., inside tmux) produced "error: Window system frame should be +;; used" because the LaTeX preview helpers (`org-latex-preview', +;; `org--latex-preview-region') require a window-system frame and +;; weren't guarded. +;; +;; Fix: gate `org-drill--show-latex-fragments' on `display-graphic-p', +;; making it a no-op on TTY. LaTeX previews are inherently graphical +;; — the right behavior in TTY is to skip the preview rather than +;; crash the session. + +;;; Code: + +(require 'ert) +(require 'cl-lib) +(require 'org) +(require 'org-drill) + +;;;; Regression — #44 + +(ert-deftest test-show-latex-fragments-noop-on-tty () + "On a non-graphic display, the helper should be a silent no-op +rather than calling org-latex-preview (which requires a window +system frame)." + (let ((latex-preview-called nil)) + (cl-letf (((symbol-function 'display-graphic-p) (lambda () nil)) + ((symbol-function 'org-clear-latex-preview) + (lambda () (setq latex-preview-called 'cleared))) + ((symbol-function 'org-latex-preview) + (lambda (&rest _) (setq latex-preview-called 'displayed)))) + (org-drill--show-latex-fragments) + (should (null latex-preview-called))))) + +(ert-deftest test-show-latex-fragments-runs-on-graphic-display () + "On a graphic display, the helper still calls through to org-latex-preview." + (let ((latex-preview-called nil)) + (cl-letf (((symbol-function 'display-graphic-p) (lambda () t)) + ((symbol-function 'org-clear-latex-preview) #'ignore) + ((symbol-function 'org-latex-preview) + (lambda (&rest _) (setq latex-preview-called t)))) + (org-drill--show-latex-fragments) + (should latex-preview-called)))) + +(provide 'test-org-drill-tty-safe) + +;;; test-org-drill-tty-safe.el ends here |
