我可以将eww配置为使用pdf-view-mode(来自pdf-tools)用于PDF而不是DocView吗?


12

我使用pdf工具在Emacs中读取PDF,并且非常喜欢DocView。我只是注意到,当我尝试在eww中打开指向该PDF的URL时,它使用DocView而不是pdf-tools中的pdf-view-mode。由于DocView无法显示PDF,这特别令人讨厌!手动将缓冲区切换到pdf-view-mode,然后成功显示它。我可以配置东西以便eww在第一次尝试时使用pdf-view-mode吗?


在附件链接中查看源代码的第403行:bzr.savannah.gnu.org/lh/emacs/trunk/annotate/head :/ lisp / net / ...可能在不同的行上,具体取决于哪个版本您正在使用。
法律列表

谢谢@lawlist,在我问了一个问题之后,我确实发现那是set doc-view-mode调用的地方(debug-on-entry 'doc-view-mode)
奥马尔

3
泰勒

@Tyler,我不确定,但我不会调查是否这样做,因为(1)这个问题已在2014年回答,您可以向下滚动到我接受的答案进行验证,(2)现在不需要答案,因为有了Emacs和pdf-tools的最新版本,我想要的东西就可以解决了!(因此几年前,我从init.el中删除了T. Verron推荐的代码)。
奥马尔

1
@Omar我认为“这是否回答了您的问题?”这句话。现在将问题标记为重复时会自动添加?无论如何,我不是用手输入的。我确实将其标记为重复项,因为链接的问题是“如何获取pdf工具以供X使用”形式的问题的规范答案。当然,您的问题是在另一个问题之前被提出并回答的,但是我认为,当一个综合性的通用回答解决一个较旧的,更具体的问题时,这样做是很正常的。
泰勒

Answers:


7

警告:肮脏的解决方法

由于您“ 比DocView更喜欢[pdf-tools] ”,因此可以安全地假设使用它查看所有pdf是可以接受的吗?

以下代码段将在您随文档一起输入时pdf-view-mode随时切换到doc-viewpdf文档。

(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)

可以通过setq将变量设置tv/prefer-pdf-tools为t或nil 来启用或禁用该行为。


哦,我错过了那个doc-view-mode钩!我尝试进行分割eww-display-pdf,但没有成功(不确定原因)。我将尝试您的解决方案并向您报告。
奥马尔2014年

很好,谢谢!这确实有效(在您删除了tv/prefer-pdf-tools不是功能的圆括号之后)。
奥马尔2014年

3

您可以使用建议周围暂时eww-display-pdf覆盖的定义doc-view-mode。使用新nadvice库,这很容易:

(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)))

要还原为原始图像doc-view-mode,请使用(advice-remove 'eww-display-pdf 'eww-display-pdf-tools)

我已打开Emacs错误19270以使EWW PDF模式可自定义。


凉!我尝试添加一些建议,eww-display-pdf以使其正常运行pdf-view-mode :after,但这由于某些原因而无效。我从来没有想过换出doc-view-mode函数的定义(可能是因为我习惯了词法作用域!)。
奥马尔2014年

也感谢您打开错误报告。我可以想象很多人实际上更喜欢eww在他们惯用的外部PDF查看器中打开PDF。
奥马尔2014年

0

我使用emacs-28,eww使用mailcap打开pdf,通过使用pdf-tools打开对其进行自定义:

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

有关更多信息,请参见Emacs-帮助-pdf查看器


你是未来人吗?我不认为Emacs的27已被释放,但(这是我使用的预发布版本),更不用说28
奥马尔

我将archlinux与emacs的开发版本一起使用:aur / emacs-git 28.0.50.139945-1 [已安装:28.0.50.140001-1](74)(1.07)GNU Emacs。开发主管分支。
邓新发
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.