Function: preview--update-buframe

preview--update-buframe is a byte-compiled function defined in preview.el.

Signature

(preview--update-buframe &optional FORCE)

Documentation

Show or hide a buframe popup depending on overlays at point.

The frame is not updated if the buframe property has not changed, unless FORCE is non-nil.

Source Code

;; Defined in ~/.emacs.d/elpa/auctex-14.2.0/preview.el
(defun preview--update-buframe (&optional force)
  "Show or hide a buframe popup depending on overlays at point.

The frame is not updated if the `buframe' property has not changed,
unless FORCE is non-nil."
  (let* ((frame-name "auctex-preview")
         (buf-name " *auctex-preview-buffer*")
         (old-frame (and (featurep 'buframe)
                         ;; Do not autoload buframe if it is not already
                         ;; loaded.
                         (buframe-find frame-name nil nil t))))
    (if-let* ((ov (cl-find-if
                   (lambda (ov) (when (overlay-get ov 'buframe) ov))
                   (overlays-at (point))))
              (str (overlay-get ov 'buframe)))
        (unless (and (not force)
                     old-frame
                     (pcase (frame-parameter old-frame 'auctex-preview)
                       (`(,o . ,s) (and (eq o ov) (eq s str)))))
          (if (require 'buframe nil t)
              (let* ((buf (buframe-make-buffer
                           buf-name
                           (car-safe
                            (cddr (cdr-safe
                                   preview-at-point-placement)))))
                     (max-image-size
                      (if (integerp max-image-size)
                          max-image-size
                        ;; Set the size max-image-size using the current
                        ;; frame, since the popup frame will be small to
                        ;; begin with.
                        (* max-image-size (frame-width)))))
                (with-current-buffer buf
                  (let (buffer-read-only)
                    (with-silent-modifications
                      (erase-buffer)
                      (insert (propertize str
                                          ;; Remove unnecessary properties
                                          'help-echo nil
                                          'keymap nil
                                          'mouse-face nil))
                      (goto-char (point-min)))))
                (setq old-frame
                      (buframe-make
                       frame-name
                       (lambda (frame)
                         (funcall
                          (or (car-safe (cdr-safe preview-at-point-placement))
                              #'buframe-position-right-of-overlay)
                          frame
                          ov))
                       buf
                       (overlay-buffer ov)
                       (window-frame)
                       (car-safe (cdr (cdr-safe
                                       preview-at-point-placement)))))
                (set-frame-parameter old-frame 'auctex-preview
                                     (cons ov str)))
            (when preview--buframe-error
              (setq preview--buframe-error nil)
              (error "buframe is unavailable for use with preview. \
See `preview-at-point-placement'."))))
      (when old-frame
        (set-frame-parameter old-frame 'auctex-preview nil)
        (buframe-disable old-frame)))))