Function: pdf-view-bookmark-jump-handler

pdf-view-bookmark-jump-handler is a natively compiled function defined in pdf-view.el.

Signature

(pdf-view-bookmark-jump-handler BMK)

Documentation

The bookmark handler-function interface for bookmark BMK.

See also pdf-view-bookmark-make-record.

Source Code

;; Defined in /nix/store/63h5z2vmzn0mfavcxi2idi23g5xcgkbl-emacs-packages-deps/share/emacs/site-lisp/elpa/pdf-tools-20260102.1101/pdf-view.el
;;;###autoload
(defun pdf-view-bookmark-jump-handler (bmk)
  "The bookmark handler-function interface for bookmark BMK.

See also `pdf-view-bookmark-make-record'."
  (let* ((file (bookmark-prop-get bmk 'filename))
         (buf (or (find-buffer-visiting file)
                  (find-file-noselect file)))
         (buf-chg-fns-p (boundp 'window-buffer-change-functions))
         (hook (if (and buf-chg-fns-p (not (get-buffer-window buf)))
                   'window-buffer-change-functions
                 'bookmark-after-jump-hook))
         (show-fn-sym (make-symbol "pdf-show-buffer-function")))
    (fset show-fn-sym
          (lambda (&optional win)
            (when (eq buf (current-buffer))
              (with-selected-window
                  (or win
                      (get-buffer-window buf 0)
                      (selected-window))
                (remove-hook hook show-fn-sym buf-chg-fns-p)
                (unless (derived-mode-p 'pdf-view-mode)
                  (pdf-view-mode))
                (when-let ((size (bookmark-prop-get
                                  pdf-view--bookmark-to-restore 'size)))
                  (setq-local pdf-view-display-size size))
                (when-let ((slice (bookmark-prop-get
                                   pdf-view--bookmark-to-restore 'slice)))
                  (apply 'pdf-view-set-slice slice))
                (when-let ((page (bookmark-prop-get
                                  pdf-view--bookmark-to-restore 'page))
                           ((numberp page)))
                  (pdf-view-goto-page page win))
                (when-let ((origin (bookmark-prop-get
                                    pdf-view--bookmark-to-restore 'origin))
                           (size (pdf-view-image-size t win)))
                  (image-set-window-hscroll
                   (round (/ (* (car origin) (car size))
                             (frame-char-width))))
                  (image-set-window-vscroll
                   (round (/ (* (cdr origin) (cdr size))
                             (if pdf-view-have-image-mode-pixel-vscroll
                                 1
                               (frame-char-height))))))
                (setq-local pdf-view--bookmark-to-restore nil)))))
    (set-buffer buf)
    (setq-local pdf-view--bookmark-to-restore bmk)
    (add-hook hook show-fn-sym nil buf-chg-fns-p)))