tools/pdf: leave it to user to build epdfinfo

Trying to do this automatically is buggy to the point of insanity. It's
not reliable enough to use as a :post-build target for the pdf-tools
package.

Better to fail gracefully, let the user know what they must do, and let
them do it at their own discretion.
This commit is contained in:
Henrik Lissner 2021-05-25 00:10:45 -04:00
parent 8424e0a780
commit daa50557a4
2 changed files with 15 additions and 22 deletions

View file

@ -18,16 +18,21 @@
(add-hook 'kill-buffer-hook #'+pdf-cleanup-windows-h nil t))) (add-hook 'kill-buffer-hook #'+pdf-cleanup-windows-h nil t)))
:config :config
;; HACK `pdf-tools-install-noverify' tries to "reset" open pdf-view-mode (defadvice! +pdf--install-epdfinfo-a (orig-fn &rest args)
;; buffers, but does so incorrectly, causing errors when pdf-tools is "Install epdfinfo after the first PDF file, if needed."
;; loaded after opening a pdf file. We've done its job ourselves in :around #'pdf-view-mode
;; `+pdf--install-epdfinfo-a' instead. (if (file-executable-p pdf-info-epdfinfo-program)
(defadvice! +pdf--inhibit-pdf-view-mode-resets-a (orig-fn &rest args) (apply orig-fn args)
:around #'pdf-tools-install-noverify ;; If we remain in pdf-view-mode, it'll spit out cryptic errors. This
(letf! ((#'pdf-tools-pdf-buffer-p #'ignore)) ;; graceful failure is better UX.
(apply orig-fn args))) (fundamental-mode)
(message "Viewing PDFs in Emacs requires epdfinfo. Use `M-x pdf-tools-install' to build it")))
(pdf-tools-install-noverify) (when (memq 'pdf-occur-global-minor-mode pdf-tools-enabled-modes)
(pdf-occur-global-minor-mode 1))
(when (memq 'pdf-virtual-global-minor-mode pdf-tools-enabled-modes)
(pdf-virtual-global-minor-mode 1))
(add-hook 'pdf-view-mode-hook 'pdf-tools-enable-minor-modes)
;; For consistency with other special modes ;; For consistency with other special modes
(map! :map pdf-view-mode-map :gn "q" #'kill-current-buffer) (map! :map pdf-view-mode-map :gn "q" #'kill-current-buffer)

View file

@ -3,19 +3,7 @@
(package! pdf-tools (package! pdf-tools
:recipe (:host github :recipe (:host github
:repo "vedang/pdf-tools" :repo "vedang/pdf-tools")
:post-build
(let ((warning-minimum-log-level :error))
(require 'pdf-tools)
(unless (file-exists-p pdf-info-epdfinfo-program)
(require 'pdf-occur)
(print-group!
(print! (start "Building epdfinfo for pdf-tools"))
(with-current-buffer (pdf-tools-install 'no-query)
(while compilation-in-progress
(sleep-for 1))
(when (> compilation-num-errors-found 0)
(print! (warn "Failed to build epdfinfo because: %s" (buffer-string)))))))))
:pin "d262cf9e19d57c6567e06e51d109150c20753839") :pin "d262cf9e19d57c6567e06e51d109150c20753839")
(package! saveplace-pdf-view :pin "54ed966b842501c3c092dbf57b372e37b033c578") (package! saveplace-pdf-view :pin "54ed966b842501c3c092dbf57b372e37b033c578")