tools/pdf: only prompt to build epdfinfo once

Fixes regression mentioned in #1788
This commit is contained in:
Henrik Lissner 2020-12-05 15:16:52 -05:00
parent d17616e835
commit f11979ed76
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -33,32 +33,33 @@
;; Prevent "epdfinfo not an executable" error short-circuiting this advice ;; Prevent "epdfinfo not an executable" error short-circuiting this advice
(prog1 (with-demoted-errors "%s" (apply orig-fn args)) (prog1 (with-demoted-errors "%s" (apply orig-fn args))
;; ...so we can go ahead and install it afterwards. ;; ...so we can go ahead and install it afterwards.
(if (not (y-or-n-p "To read PDFs in Emacs the epdfinfo program must be built. Build it now?")) (cond ((file-executable-p pdf-info-epdfinfo-program))
(message "Aborted") ((y-or-n-p "To read PDFs in Emacs the epdfinfo program must be built. Build it now?")
(message nil) ; flush lingering prompt in echo-area (message nil) ; flush lingering prompt in echo-area
;; Make sure this doesn't run more than once ;; Make sure this doesn't run more than once
(advice-remove #'pdf-view-mode #'+pdf--install-epdfinfo-a) (advice-remove #'pdf-view-mode #'+pdf--install-epdfinfo-a)
(if (or (pdf-info-running-p) (if (or (pdf-info-running-p)
(ignore-errors (pdf-info-check-epdfinfo) t)) (ignore-errors (pdf-info-check-epdfinfo) t))
(pdf-tools-install-noverify) (pdf-tools-install-noverify)
;; HACK On the first pdf you open (before pdf-tools loaded) ;; HACK On the first pdf you open (before pdf-tools loaded)
;; `pdf-tools-install' throws errors because it has hardcoded ;; `pdf-tools-install' throws errors because it has hardcoded
;; opinions about what buffer should be focused when it is run. ;; opinions about what buffer should be focused when it is run.
;; These errors cause `compile' to position the compilation ;; These errors cause `compile' to position the compilation
;; window incorrectly or can interfere with the opening of the ;; window incorrectly or can interfere with the opening of the
;; original pdf--sometimes aborting/burying it altogether. A ;; original pdf--sometimes aborting/burying it altogether. A
;; timer works around this. ;; timer works around this.
(run-at-time (run-at-time
0.1 nil 0.1 nil
(lambda () (lambda ()
(with-current-buffer (pdf-tools-install t) (with-current-buffer (pdf-tools-install t)
(add-hook! 'compilation-finish-functions :local (add-hook! 'compilation-finish-functions :local
(dolist (buf (buffer-list)) (dolist (buf (buffer-list))
(with-current-buffer buf (with-current-buffer buf
(and (buffer-file-name) (and (buffer-file-name)
(or (pdf-tools-pdf-buffer-p) (or (pdf-tools-pdf-buffer-p)
(derived-mode-p 'pdf-view-mode)) (derived-mode-p 'pdf-view-mode))
(revert-buffer t t)))))))))))) (revert-buffer t t))))))))))
((message "Aborted")))))
;; 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)