branch: master
commit 7ea85682098b831eb5d04b9be4c780ed8ab56e8c
Author: Paul Nelson <[email protected]>
Commit: Arash Esbati <[email protected]>
Add new custom option `preview-protect-point'
* preview.el.in (preview-protect-point): New custom option.
(preview-parse-messages): Use it.
* doc/preview-latex.texi (The Emacs interface): Document it.
(bug#70442)
---
doc/preview-latex.texi | 4 ++++
preview.el.in | 18 +++++++++++++++++-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/doc/preview-latex.texi b/doc/preview-latex.texi
index 4aba7cb5..07adc2a9 100644
--- a/doc/preview-latex.texi
+++ b/doc/preview-latex.texi
@@ -668,6 +668,10 @@ when this is needed is in
accordingly @code{split} is one entry in
@code{preview-inner-environments}.
+@item preview-protect-point
+This boolean variable determines whether previews generated on top of the
+current point should be temporarily opened. Default value is @code{nil}.
+
@end vtable
@node The preview images, Misplaced previews, The Emacs interface, For
advanced users
diff --git a/preview.el.in b/preview.el.in
index d060174c..0cacbfcd 100644
--- a/preview.el.in
+++ b/preview.el.in
@@ -3278,6 +3278,13 @@ beginning of the overlay. This is intended to be used
in conjunction
with `preview-preprocess-function' when the latter introduces
significant modifications.")
+(defcustom preview-protect-point nil
+ "Temporarily open new previews that would obscure point.
+If non-nil, then any new preview whose bounds contain point is
+temporarily opened, as if the user had entered it via movement commands."
+ :group 'preview-appearance
+ :type 'boolean)
+
(defvar preview-locating-previews-message "locating previews...")
(defun preview-parse-messages (open-closure)
@@ -3298,6 +3305,7 @@ call, and in its CDR the final stuff for the placement
hook."
(run-buffer (current-buffer))
(run-directory default-directory)
tempdir
+ point-current
close-data
open-data
fast-hook
@@ -3520,6 +3528,7 @@ name(\\([^)]+\\))\\)\\|\
(setq lfile file))
(save-excursion
(save-restriction
+ (setq point-current (point))
(widen)
;; a fast hook might have positioned us already:
(if (number-or-marker-p string)
@@ -3618,7 +3627,14 @@ name(\\([^)]+\\))\\)\\|\
(cons lcounters counters)
tempdir
(cdr open-data))))
- (setq close-data (nconc ovl close-data)))
+ (setq close-data (nconc ovl close-data))
+ (when (and preview-protect-point
+ (<= region-beg point-current)
+ (< point-current region-end))
+ ;; Temporarily open the preview if it
+ ;; would bump the point.
+ (preview-toggle (car ovl))
+ (push (car ovl) preview-temporary-opened)))
(with-current-buffer run-buffer
(preview-log-error
(list 'error