forked from mirrors/org-mode
org-latex-preview: Rework auto toggle behaviour
* lisp/org-latex-preview.el (org-latex-preview--auto-aware-toggle): Adjust the toggle behaviour to hopefully behave more intuitively.
This commit is contained in:
parent
58b2400e00
commit
4e623d4593
|
@ -880,38 +880,46 @@ fragments in the buffer."
|
|||
"Toggle the preview of the LaTeX fragment/environment DATUM.
|
||||
This is done with care to work nicely with `org-latex-preview-auto-mode',
|
||||
should it be enabled."
|
||||
(let ((beg (org-element-property :begin datum))
|
||||
(end (org-element-property :end datum)))
|
||||
(let* ((beg (org-element-property :begin datum))
|
||||
(end (org-element-property :end datum))
|
||||
(ov (cl-some
|
||||
(lambda (o)
|
||||
(and (eq (overlay-get o 'org-overlay-type)
|
||||
'org-latex-overlay)
|
||||
o))
|
||||
(overlays-at beg))))
|
||||
;; If using auto-mode, an overlay will already exist but
|
||||
;; not be showing an image. We can detect this
|
||||
;; situtation via the preview-state overlay property, and
|
||||
;; in such cases the most reasonable action is to just
|
||||
;; (re)generate the preview image.
|
||||
(pcase (cl-some
|
||||
(lambda (o)
|
||||
(and (eq (overlay-get o 'org-overlay-type)
|
||||
'org-latex-overlay)
|
||||
o))
|
||||
(overlays-at beg))
|
||||
;; When not using auto-mode, or there is no overlay.
|
||||
((or (pred not) (guard (not org-latex-preview-auto-mode)))
|
||||
(if (org-latex-preview-clear-overlays beg end)
|
||||
(message "LaTeX preview removed")
|
||||
(org-latex-preview--preview-region beg end)))
|
||||
;; When on a just written/edited fragment that should be previewed.
|
||||
((and ov (guard (eq (overlay-get ov 'preview-state) 'modified)))
|
||||
(org-latex-preview-auto--regenerate-overlay ov)
|
||||
(overlay-put ov 'view-text t))
|
||||
;; When on an unmodified fragment that is currently showing an image,
|
||||
;; hide the image.
|
||||
((and ov (guard (overlay-get ov 'display)))
|
||||
(org-latex-preview-auto--open-this-overlay))
|
||||
;; Since we're on an unmodified fragment but not showing an image,
|
||||
;; let's try to show the image if possible.
|
||||
(ov
|
||||
(overlay-put ov 'view-text t)
|
||||
(overlay-put ov 'face (overlay-get ov 'hidden-face))
|
||||
(overlay-put ov 'display (overlay-get ov 'preview-image))))))
|
||||
(cond
|
||||
;; When not using auto-mode.
|
||||
((not org-latex-preview-auto-mode)
|
||||
(if (org-latex-preview-clear-overlays beg end)
|
||||
(message "LaTeX preview removed")
|
||||
(org-latex-preview--place-from-elements
|
||||
org-latex-preview-default-process (list datum))))
|
||||
;; When using auto-mode, but no current preview.
|
||||
((not ov)
|
||||
(org-latex-preview--place-from-elements
|
||||
org-latex-preview-default-process (list datum))
|
||||
(message "Creating LaTeX preview"))
|
||||
;; When on a just written/edited fragment that should be previewed.
|
||||
((eq (overlay-get ov 'preview-state) 'modified)
|
||||
(org-latex-preview-auto--regenerate-overlay ov)
|
||||
(overlay-put ov 'view-text t))
|
||||
;; When on an unmodified fragment that is currently showing an image,
|
||||
;; clear the image.
|
||||
((overlay-get ov 'display)
|
||||
(org-latex-preview-clear-overlays beg end)
|
||||
(message "LaTeX preview removed"))
|
||||
;; Since we're on an unmodified fragment but not showing an image,
|
||||
;; let's try to show the image if possible.
|
||||
(ov
|
||||
(overlay-put ov 'view-text t)
|
||||
(overlay-put ov 'face (overlay-get ov 'hidden-face))
|
||||
(overlay-put ov 'display (overlay-get ov 'preview-image))))))
|
||||
|
||||
(defun org-latex-preview-collect-fragments (&optional beg end)
|
||||
"Collect all LaTeX maths fragments/environments between BEG and END."
|
||||
|
|
Loading…
Reference in New Issue