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?

  • 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 '14 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 '14 at 22:04
  • 3
    Does this answer your question? How to use pdf-tools (pdf-view-mode) in emacs? – Tyler Jan 14 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 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 at 22:13
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.

| improve this answer | |
  • 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 '14 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 '14 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.

| improve this answer | |
  • 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 '14 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 '14 at 14:28
0

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.

| improve this answer | |
  • 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 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 at 3:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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