Могу ли я настроить eww для использования pdf-view-mode (из pdf-tools) для PDF вместо DocView?

12

Я использую pdf-инструменты для чтения PDF-файлов внутри Emacs и очень предпочитаю его DocView. Я только что заметил, что когда я пытаюсь открыть URL, который указывает на PDF в eww, он использует DocView вместо pdf-view-mode из pdf-tools. Это особенно раздражает, так как DocView не может отобразить PDF! Переключение буфера в режим pdf-view-mode вручную затем успешно показывает это. Могу ли я настроить все так, чтобы eww использовал pdf-view-mode с первой попытки?

Омар
источник
Взгляните на строку 403 исходного кода в прикрепленной ссылке: bzr.savannah.gnu.org/lh/emacs/trunk/annotate/head:/lisp/net/… Это может быть в другой строке в зависимости от того, какая версия ты используешь.
юрист
Спасибо, @lawlist, после того, как я задал вопрос, я обнаружил, что это было вызвано doc-view-modeустановкой (debug-on-entry 'doc-view-mode).
Омар
3
Отвечает ли это на ваш вопрос? Как использовать pdf-tools (pdf-view-mode) в emacs?
Тайлер
@ Тайлер, я не уверен, но я не буду исследовать, так ли это или нет, потому что (1) на этот вопрос уже был дан ответ в 2014 году, как вы можете проверить, прокрутив до ответа, который я принял, (2) даже это в настоящее время ответ не нужен, поскольку с более свежими версиями Emacs и pdf-tools все, что я хотел, работает без проблем! (поэтому я удалил код, любезно предложенный Т. Верроном, из моего init.el несколько лет назад).
Омар
1
@ Омар, я думаю фраза "Это ответит на твой вопрос?" добавляется автоматически, когда вы помечаете вопрос как дубликат сейчас? Во всяком случае, я не входил в него вручную. Я пометил это как дубликат, потому что связанный вопрос служит каноническим ответом на вопросы формы «как мне заставить pdf-инструменты работать для X». Конечно, ваш вопрос задавался и отвечался до того, как был задан другой вопрос, но я думаю, что это нормально, когда всеобъемлющий общий ответ касается более старого, более конкретного вопроса.
Тайлер

Ответы:

7

Предупреждение: грязный обходной путь впереди

Поскольку вы « очень предпочитаете [pdf-tools] DocView », можно ли предположить, что использование его для просмотра всех pdfs приемлемо?

Следующий фрагмент кода переключит документ на pdf-view-modeлюбое время doc-view, введенное вместе с pdfдокументом.

(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, но это не сработало (не знаю почему). Я попробую ваше решение и сообщу.
Омар
Круто, спасибо! Это работает (после того, как вы удалите круглую скобку tv/prefer-pdf-tools, которая не является функцией).
Омар
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 bug 19270, чтобы настроить EWW PDF Mode.

lunaryorn
источник
Прохладно! Я попытался добавить совет, чтобы eww-display-pdfпросто запустить pdf-view-mode :afterего, он сделал свою обычную работу, но по какой-то причине это не сработало. Мне никогда не приходило в голову поменять определение doc-view-modeфункции (вероятно, потому что я так привык к лексической области видимости!).
Омар
Спасибо за открытие сообщения об ошибке тоже. Я предполагаю, что многие люди на самом деле предпочли бы, чтобы eww открывал PDF-файлы в их обычном внешнем средстве просмотра PDF.
Омар
0

Я использую emacs-28, eww использует mailcap для открытия pdf, настраиваю его, открывая с помощью pdf-tools:

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

Смотрите Emacs - Help - pdf viewer для получения дополнительной информации.

Xinfa Tang
источник
Вы из будущего? Я не думаю, что Emacs 27 был выпущен (это предварительная сборка, которую я использую), не говоря уже о 28.
Омар
Я использую archlinux с версией разработки emacs: aur / emacs-git 28.0.50.139945-1 [установлено: 28.0.50.140001-1] (74) (1.07) GNU Emacs. Развитие мастер ветки.
Xinfa Tang