aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--org-drill.el28
-rw-r--r--tests/test-org-drill-tty-safe.el49
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