From 68a63df918d8b9bc636ae09adbb08e36520c9f4c Mon Sep 17 00:00:00 2001 From: kovan Date: Fri, 13 Feb 2026 22:31:14 +0100 Subject: [PATCH] feat(org): scale LaTeX previews with `doom-big-font-mode' Scale org-mode LaTeX fragment previews proportionally when `doom-big-font-mode' is toggled. Visible org buffers regenerate immediately; buried ones defer until switched to. Fix: #5580 Co-authored-by: Claude Opus 4.6 --- modules/lang/org/config.el | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index aa7ecec1800..f5577629ab9 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -67,6 +67,11 @@ Is relative to `org-directory', unless it is absolute. Is used in Doom's default (defvar +org-startup-with-animated-gifs nil "If non-nil, and the cursor is over a gif inline-image preview, animate it!") +(defvar +org--latex-preview-default-scale nil + "The default `org-format-latex-options' :scale value. +Captured when org appearance is initialized, used by +`+org-big-font-toggle-latex-previews-h' to restore the original scale.") + ;; ;;; `org-load' hooks @@ -102,6 +107,34 @@ Is relative to `org-directory', unless it is absolute. Is used in Doom's default org-agenda-inhibit-startup t)) +(defun +org-big-font-toggle-latex-previews-h () + "Scale org LaTeX preview fragments when `doom-big-font-mode' is toggled." + (let ((scale (if doom-big-font-mode + (let* ((base-size (or (ignore-errors + (font-get (doom-normalize-font + (or doom-font (face-font 'default))) + :size)) + 14.0)) + (increment (* doom-big-font-increment doom-font-increment))) + (* +org--latex-preview-default-scale + (/ (+ base-size increment) base-size))) + +org--latex-preview-default-scale))) + (plist-put org-format-latex-options :scale scale) + (dolist (buf (doom-buffers-in-mode 'org-mode)) + (if (get-buffer-window buf) + (with-current-buffer buf + (org-clear-latex-preview) + (org--latex-preview-region (point-min) (point-max))) + (with-current-buffer buf + (add-hook 'doom-switch-buffer-hook #'+org--regenerate-latex-previews-h nil 'local)))))) + +(defun +org--regenerate-latex-previews-h () + "Regenerate LaTeX previews in current buffer and remove self from hook." + (remove-hook 'doom-switch-buffer-hook #'+org--regenerate-latex-previews-h 'local) + (org-clear-latex-preview) + (org--latex-preview-region (point-min) (point-max))) + + (defun +org-init-appearance-h () "Configures the UI for `org-mode'." (setq org-indirect-buffer-display 'current-window @@ -139,6 +172,9 @@ Is relative to `org-directory', unless it is absolute. Is used in Doom's default org-outline-path-complete-in-steps nil) (plist-put org-format-latex-options :scale 1.5) ; larger previews + (setq +org--latex-preview-default-scale + (plist-get org-format-latex-options :scale)) + (add-hook 'doom-big-font-mode-hook #'+org-big-font-toggle-latex-previews-h) ;; HACK Face specs fed directly to `org-todo-keyword-faces' don't respect ;; underlying faces like the `org-todo' face does, so we define our own