12

I use pdf-tools to read PDFs inside of Emacs and greatly prefer it to DocView. I just noticed that when I try to open a URL thar points to a PDF in eww, it uses DocView instead of the pdf-view-mode from pdf-tools. This is particularly annoying since DocView fails to display the PDF! Switching the buffer to pdf-view-mode manually then succesfully shows it. Can I configure things so that eww uses pdf-view-mode on the first try?

6
  • Take a look at line 403 of the source code in the attached link: bzr.savannah.gnu.org/lh/emacs/trunk/annotate/head:/lisp/net/… It may be on a different line depending on which version you are using.
    – lawlist
    Dec 3, 2014 at 21:24
  • Thanks, @lawlist, after I asked the question I did find that was where doc-view-mode was called by setting (debug-on-entry 'doc-view-mode).
    – Omar
    Dec 3, 2014 at 22:04
  • 3
    Does this answer your question? How to use pdf-tools (pdf-view-mode) in emacs?
    – Tyler
    Jan 14, 2020 at 20:10
  • @Tyler, I'm not sure but I won't investigate whether it does or not because (1) this question was already answered in the year 2014, as you verify by scrolling down to the answer I accepted, (2) even that answer is unnecessary nowadays since with more recent versions of Emacs and pdf-tools what I wanted works out the box! (so I removed the code kindly suggested by T. Verron from my init.el a few years ago).
    – Omar
    Jan 15, 2020 at 17:51
  • 1
    @Omar I think the phrase "Does this answer your question?" gets added automatically when you flag a question as a duplicate now? I didn't enter it by hand, anyways. I did flag this as a duplicate, because the linked question serves as the canonical answer to questions of the form "how do I get pdf-tools to work for X". Of course, your question was asked and answered before the other question was, but I think it's normal to do this when a comprehensive general answer addresses an older, more specific question.
    – Tyler
    Jan 15, 2020 at 22:13

3 Answers 3

7

Warning: dirty work-around ahead

Since you "greatly prefer [pdf-tools] to DocView", is it safe to assume that using it to view all pdfs is acceptable?

The following code snippet will switch the document to pdf-view-mode anytime doc-viewis entered with a pdf document.

(defvar tv/prefer-pdf-tools (fboundp 'pdf-view-mode))
(defun tv/start-pdf-tools-if-pdf ()
  (when (and tv/prefer-pdf-tools
             (eq doc-view-doc-type 'pdf))
    (pdf-view-mode)))

(add-hook 'doc-view-mode-hook 'tv/start-pdf-tools-if-pdf)

The behavior can be enabled or disabled by setq-ing the variable tv/prefer-pdf-tools to t or nil.

2
  • Oh, I had missed that doc-view-mode had a hook! I tried adivising eww-display-pdf and that didn't work (not sure why). I'll try your solution and report back.
    – Omar
    Dec 4, 2014 at 13:11
  • Awesome, thanks! This does work (after you remove the parenthesis around tv/prefer-pdf-tools, which is not a function).
    – Omar
    Dec 4, 2014 at 13:17
3

You can use an advise around eww-display-pdf to override the definition of doc-view-mode temporarily. With the new nadvice library this is as easy as:

(advice-add 'eww-display-pdf
            :around (lambda (orig &rest args)
                      (cl-letf (((symbol-function 'doc-view-mode) #'pdf-view-mode))
                        (apply orig args)))
            '((name . eww-display-pdf-tools)))

To revert back to the original doc-view-mode, use (advice-remove 'eww-display-pdf 'eww-display-pdf-tools).

I have opened Emacs bug 19270 to make the EWW PDF Mode customizable.

2
  • Cool! I tried adding advice to eww-display-pdf to just make it run pdf-view-mode :after it did its usual work, but that didn't work for some reason. It never occurred to me to swap out the definition of the doc-view-mode function (probably because I'm so used to lexical scope!).
    – Omar
    Dec 4, 2014 at 14:28
  • Thanks for opening the bug report too. I would imagine lots of people would actually prefer eww to open PDFs in their customary external PDF viewer.
    – Omar
    Dec 4, 2014 at 14:28
1

I use emacs-28, eww use mailcap to open pdf, custom it by open with pdf-tools:

(add-to-list 'mailcap-user-mime-data
               '((type . "application/pdf")
                 (viewer . pdf-view-mode)))

See Emacs - Help - pdf viewer for more information.

3
  • Are you from the future? I don't think Emacs 27 has been released yet (that's the pre-release build I'm using), let alone 28.
    – Omar
    Jan 14, 2020 at 15:23
  • I use archlinux with the development version of emacs: aur/emacs-git 28.0.50.139945-1 [installed: 28.0.50.140001-1] (74) (1.07) GNU Emacs. Development master branch.
    – xinfa tang
    Jan 15, 2020 at 3:18
  • Amazing. Finally a solution that works! Thank you very much!
    – Ajned
    Oct 23, 2021 at 8:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.