Live preview pane

This commit is contained in:
Zelong Kuang
2025-11-17 20:44:54 +11:00
parent 315a7a674b
commit 4d35c7966c
4 changed files with 315 additions and 159 deletions

View File

@@ -1,11 +1,28 @@
(setq doom-font (font-spec :family "Maple Mono" :size 20)) (setq doom-font (font-spec :family "Maple Mono" :size 20))
(add-to-list 'default-frame-alist '(height . 53)) (add-to-list 'default-frame-alist '(height . 53))
(add-to-list 'default-frame-alist '(width . 120)) (add-to-list 'default-frame-alist '(width . 120))
(setq catppuccin-flavor 'mocha) (setq catppuccin-flavor 'catppuccin)
(setq doom-theme 'catppuccin) (setq doom-theme 'modus-operandi-tinted)
(setq display-line-numbers-type 'relative) (setq display-line-numbers-type 'relative)
(setq org-directory "~/org/") (setq org-directory "~/org/")
(use-package! nano-modeline
:config
(add-hook 'prog-mode-hook #'nano-modeline-prog-mode)
(add-hook 'text-mode-hook #'nano-modeline-text-mode)
(add-hook 'org-mode-hook #'nano-modeline-org-mode)
(add-hook 'pdf-view-mode-hook #'nano-modeline-pdf-mode)
(add-hook 'mu4e-headers-mode-hook #'nano-modeline-mu4e-headers-mode)
(add-hook 'mu4e-view-mode-hook #'nano-modeline-mu4e-message-mode)
(add-hook 'elfeed-show-mode-hook #'nano-modeline-elfeed-entry-mode)
(add-hook 'elfeed-search-mode-hook #'nano-modeline-elfeed-search-mode)
(add-hook 'term-mode-hook #'nano-modeline-term-mode)
(add-hook 'xwidget-webkit-mode-hook #'nano-modeline-xwidget-mode)
(add-hook 'messages-buffer-mode-hook #'nano-modeline-message-mode)
(add-hook 'org-capture-mode-hook #'nano-modeline-org-capture-mode)
(add-hook 'org-agenda-mode-hook #'nano-modeline-org-agenda-mode)
(global-hide-mode-line-mode t))
(use-package! yasnippet (use-package! yasnippet
:config :config
(defun my-yas-try-expanding-auto-snippets () (defun my-yas-try-expanding-auto-snippets ()
@@ -18,7 +35,7 @@
(use-package! gptel (use-package! gptel
:config :config
(setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449") (setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449")
(setq gptel-model 'gpt-5) (setq gptel-model 'claude-sonnet-4.5)
(setq gptel-backend (gptel-make-gh-copilot "Copilot")) (setq gptel-backend (gptel-make-gh-copilot "Copilot"))
(map! "M-s RET" #'gptel-send) (map! "M-s RET" #'gptel-send)
(map! "M-s m" #'gptel-menu) (map! "M-s m" #'gptel-menu)
@@ -46,7 +63,7 @@
;; :load-path "path/to/typst-preview.el" ;; if installed manually ;; :load-path "path/to/typst-preview.el" ;; if installed manually
:init :init
(setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated (setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated
;; (setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run (setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run
:custom :custom
(typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'. (typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'.
@@ -56,7 +73,62 @@
:config :config
(define-key typst-preview-mode-map (kbd "C-c C-j") 'typst-preview-send-position) (define-key typst-preview-mode-map (kbd "C-c C-j") 'typst-preview-send-position)
(define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode)) (define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode)
)
(use-package! org (use-package org-latex-preview
:hook (org-mode . org-latex-preview-mode)) :config
;; Increase preview width
(plist-put org-latex-preview-appearance-options
:page-width 0.8)
(add-hook 'org-mode-hook 'org-latex-preview-mode)
;; ;; Block C-n, C-p etc from opening up previews when using `org-latex-preview-mode'
;; (setq org-latex-preview-mode-ignored-commands
;; '(next-line previous-line mwheel-scroll
;; scroll-up-command scroll-down-command))
;; ;; Enable consistent equation numbering
(setq org-latex-preview-numbered t)
;; Bonus: Turn on live previews. This shows you a live preview of a LaTeX
;; fragment and updates the preview in real-time as you edit it.
;; To preview only environments, set it to '(block edit-special) instead
(setq org-latex-preview-mode-display-live t)
;; More immediate live-previews -- the default delay is 1 second
(setq org-latex-preview-mode-update-delay 0)
(defun my/org-latex-preview-uncenter (ov)
(overlay-put ov 'before-string nil))
(defun my/org-latex-preview-recenter (ov)
(overlay-put ov 'before-string (overlay-get ov 'justify)))
(defun my/org-latex-preview-center (ov)
(save-excursion
(goto-char (overlay-start ov))
(when-let* ((elem (org-element-context))
((or (eq (org-element-type elem) 'latex-environment)
(string-match-p "^\\\\\\[" (org-element-property :value elem))))
(img (overlay-get ov 'display))
(prop `(space :align-to (- center (0.55 . ,img))))
(justify (propertize " " 'display prop 'face 'default)))
(overlay-put ov 'justify justify)
(overlay-put ov 'before-string (overlay-get ov 'justify)))))
(define-minor-mode org-latex-preview-center-mode
"Center equations previewed with `org-latex-preview'."
:global nil
(if org-latex-preview-center-mode
(progn
(add-hook 'org-latex-preview-overlay-open-functions
#'my/org-latex-preview-uncenter nil :local)
(add-hook 'org-latex-preview-overlay-close-functions
#'my/org-latex-preview-recenter nil :local)
(add-hook 'org-latex-preview-overlay-update-functions
#'my/org-latex-preview-center nil :local))
(remove-hook 'org-latex-preview-overlay-close-functions
#'my/org-latex-preview-recenter)
(remove-hook 'org-latex-preview-overlay-update-functions
#'my/org-latex-preview-center)
(remove-hook 'org-latex-preview-overlay-open-functions
#'my/org-latex-preview-uncenter))))

View File

@@ -5,16 +5,39 @@
(setq doom-font (font-spec :family "Maple Mono" :size 20)) (setq doom-font (font-spec :family "Maple Mono" :size 20))
(add-to-list 'default-frame-alist '(height . 53)) (add-to-list 'default-frame-alist '(height . 53))
(add-to-list 'default-frame-alist '(width . 120)) (add-to-list 'default-frame-alist '(width . 120))
(setq catppuccin-flavor 'mocha) (setq catppuccin-flavor 'catppuccin)
(setq doom-theme 'catppuccin) (setq doom-theme 'modus-operandi-tinted)
(setq display-line-numbers-type 'relative) (setq display-line-numbers-type 'relative)
(setq org-directory "~/org/") (setq org-directory "~/org/")
#+end_src #+end_src
*** Themes *** Themes
**** Catppuccin **** Catppuccin
#+begin_src emacs-lisp :tangle packages.el #+begin_src emacs-lisp :tangle packages.el
(package! catppuccin-theme) (package! catppuccin-theme)
#+end_src #+end_src
*** Nano modeline
#+begin_src emacs-lisp :tangle packages.el
(package! nano-modeline)
#+end_src
#+begin_src emacs-lisp
(use-package! nano-modeline
:config
(add-hook 'prog-mode-hook #'nano-modeline-prog-mode)
(add-hook 'text-mode-hook #'nano-modeline-text-mode)
(add-hook 'org-mode-hook #'nano-modeline-org-mode)
(add-hook 'pdf-view-mode-hook #'nano-modeline-pdf-mode)
(add-hook 'mu4e-headers-mode-hook #'nano-modeline-mu4e-headers-mode)
(add-hook 'mu4e-view-mode-hook #'nano-modeline-mu4e-message-mode)
(add-hook 'elfeed-show-mode-hook #'nano-modeline-elfeed-entry-mode)
(add-hook 'elfeed-search-mode-hook #'nano-modeline-elfeed-search-mode)
(add-hook 'term-mode-hook #'nano-modeline-term-mode)
(add-hook 'xwidget-webkit-mode-hook #'nano-modeline-xwidget-mode)
(add-hook 'messages-buffer-mode-hook #'nano-modeline-message-mode)
(add-hook 'org-capture-mode-hook #'nano-modeline-org-capture-mode)
(add-hook 'org-agenda-mode-hook #'nano-modeline-org-agenda-mode)
(global-hide-mode-line-mode t))
#+end_src
** Plugins ** Plugins
*** Yasnippet *** Yasnippet
Thisenables the feature of auto-expanding snippets when matching the pattern Thisenables the feature of auto-expanding snippets when matching the pattern
@@ -87,7 +110,7 @@ Configuration
(use-package! gptel (use-package! gptel
:config :config
(setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449") (setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449")
(setq gptel-model 'gpt-5) (setq gptel-model 'claude-sonnet-4.5)
(setq gptel-backend (gptel-make-gh-copilot "Copilot")) (setq gptel-backend (gptel-make-gh-copilot "Copilot"))
(map! "M-s RET" #'gptel-send) (map! "M-s RET" #'gptel-send)
(map! "M-s m" #'gptel-menu) (map! "M-s m" #'gptel-menu)
@@ -135,7 +158,7 @@ Configuration
;; :load-path "path/to/typst-preview.el" ;; if installed manually ;; :load-path "path/to/typst-preview.el" ;; if installed manually
:init :init
(setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated (setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated
;; (setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run (setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run
:custom :custom
(typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'. (typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'.
@@ -145,7 +168,8 @@ Configuration
:config :config
(define-key typst-preview-mode-map (kbd "C-c C-j") 'typst-preview-send-position) (define-key typst-preview-mode-map (kbd "C-c C-j") 'typst-preview-send-position)
(define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode)) (define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode)
)
#+end_src #+end_src
*** Latex *** Latex
@@ -155,6 +179,9 @@ Configuration
#+end_src #+end_src
*** Org *** Org
1. delete all org-* packages from emacs (can be done by deleting folders in .local/straight)
2. delete eln-cache
3. doom sync -u
#+begin_src emacs-lisp :tangle packages.el #+begin_src emacs-lisp :tangle packages.el
(package! org :recipe (package! org :recipe
(:host nil :repo "https://git.tecosaur.net/mirrors/org-mode.git" :remote "mirror" :fork (:host nil :repo "https://git.tecosaur.net/mirrors/org-mode.git" :remote "mirror" :fork
@@ -183,6 +210,61 @@ Configuration
#+end_src #+end_src
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package! org
:hook (org-mode . org-latex-preview-mode)) (use-package org-latex-preview
:config
;; Increase preview width
(plist-put org-latex-preview-appearance-options
:page-width 0.8)
(add-hook 'org-mode-hook 'org-latex-preview-mode)
;; ;; Block C-n, C-p etc from opening up previews when using `org-latex-preview-mode'
;; (setq org-latex-preview-mode-ignored-commands
;; '(next-line previous-line mwheel-scroll
;; scroll-up-command scroll-down-command))
;; ;; Enable consistent equation numbering
(setq org-latex-preview-numbered t)
;; Bonus: Turn on live previews. This shows you a live preview of a LaTeX
;; fragment and updates the preview in real-time as you edit it.
;; To preview only environments, set it to '(block edit-special) instead
(setq org-latex-preview-mode-display-live t)
;; More immediate live-previews -- the default delay is 1 second
(setq org-latex-preview-mode-update-delay 0)
(defun my/org-latex-preview-uncenter (ov)
(overlay-put ov 'before-string nil))
(defun my/org-latex-preview-recenter (ov)
(overlay-put ov 'before-string (overlay-get ov 'justify)))
(defun my/org-latex-preview-center (ov)
(save-excursion
(goto-char (overlay-start ov))
(when-let* ((elem (org-element-context))
((or (eq (org-element-type elem) 'latex-environment)
(string-match-p "^\\\\\\[" (org-element-property :value elem))))
(img (overlay-get ov 'display))
(prop `(space :align-to (- center (0.55 . ,img))))
(justify (propertize " " 'display prop 'face 'default)))
(overlay-put ov 'justify justify)
(overlay-put ov 'before-string (overlay-get ov 'justify)))))
(define-minor-mode org-latex-preview-center-mode
"Center equations previewed with `org-latex-preview'."
:global nil
(if org-latex-preview-center-mode
(progn
(add-hook 'org-latex-preview-overlay-open-functions
#'my/org-latex-preview-uncenter nil :local)
(add-hook 'org-latex-preview-overlay-close-functions
#'my/org-latex-preview-recenter nil :local)
(add-hook 'org-latex-preview-overlay-update-functions
#'my/org-latex-preview-center nil :local))
(remove-hook 'org-latex-preview-overlay-close-functions
#'my/org-latex-preview-recenter)
(remove-hook 'org-latex-preview-overlay-update-functions
#'my/org-latex-preview-center)
(remove-hook 'org-latex-preview-overlay-open-functions
#'my/org-latex-preview-uncenter))))
#+end_src #+end_src

10
init.el
View File

@@ -32,19 +32,19 @@
doom ; what makes DOOM look the way it does doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs ;;doom-quit ; DOOM quit-message prompts when you quit Emacs
(emoji +unicode) ; 🙂 ;; (emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;; indent-guides ; highlighted indent columns ;; indent-guides ; highlighted indent columns
ligatures ; ligatures and symbols to make your code pretty again ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side ;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API ;; modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions ;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim ;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows (popup +defaults) ; tame sudden yet inevitable temporary windows
smooth-scroll ; So smooth you won't believe it's not butter smooth-scroll ; So smooth you won't believe it's not butter
tabs ; a tab bar for Emacs ;; tabs ; a tab bar for Emacs
treemacs ; a project drawer, like neotree but cooler ;; treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe (vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB vi-tilde-fringe ; fringe tildes to mark beyond EOB
@@ -99,7 +99,7 @@
(eval +overlay) ; run code, run (also, repls) (eval +overlay) ; run code, run (also, repls)
lookup ; navigate your code and its documentation lookup ; navigate your code and its documentation
;;llm ; when I said you needed friends, I didn't mean... ;;llm ; when I said you needed friends, I didn't mean...
(lsp +eglot +peek +booster) ; M-x vscode (lsp +eglot +booster) ; M-x vscode
magit ; a git porcelain for Emacs magit ; a git porcelain for Emacs
make ; run make tasks from Emacs make ; run make tasks from Emacs
;;pass ; password manager for nerds ;;pass ; password manager for nerds

View File

@@ -1,5 +1,7 @@
(package! catppuccin-theme) (package! catppuccin-theme)
(package! nano-modeline)
(package! gptel :recipe (:nonrecursive t)) (package! gptel :recipe (:nonrecursive t))
(package! typst-ts-mode :recipe (:host codeberg :repo "meow_king/typst-ts-mode")) (package! typst-ts-mode :recipe (:host codeberg :repo "meow_king/typst-ts-mode"))