Kann ich eww so konfigurieren, dass der PDF-Ansichtsmodus (aus PDF-Tools) für PDFs anstelle von DocView verwendet wird?


12

Ich verwende PDF-Tools , um PDFs in Emacs zu lesen, und bevorzuge es DocView. Mir ist gerade aufgefallen, dass beim Versuch, eine URL zu öffnen, die auf ein PDF in eww verweist, DocView anstelle des PDF-Ansichtsmodus von PDF-Tools verwendet wird. Dies ist besonders ärgerlich, da DocView das PDF nicht anzeigt! Wenn Sie den Puffer manuell in den PDF-Ansichtsmodus schalten, wird er erfolgreich angezeigt. Kann ich Dinge so konfigurieren, dass eww beim ersten Versuch den PDF-Ansichtsmodus verwendet?


Schauen Sie sich Zeile 403 des Quellcodes im angehängten Link an: bzr.savannah.gnu.org/lh/emacs/trunk/annotate/head:/lisp/net/… Je nach Version kann es sich um eine andere Zeile handeln du benutzt.
Lawlist

Danke, @lawlist, nachdem ich die Frage gestellt hatte, fand ich, dass dort doc-view-modedurch Einstellen aufgerufen wurde (debug-on-entry 'doc-view-mode).
Omar


@ Tyler, ich bin mir nicht sicher, aber ich werde nicht untersuchen, ob dies der Fall ist oder nicht, da (1) diese Frage bereits im Jahr 2014 beantwortet wurde, wie Sie überprüfen, indem Sie nach unten zu der Antwort scrollen, die ich akzeptiert habe, (2) auch das Eine Antwort ist heutzutage nicht mehr erforderlich, da mit neueren Versionen von Emacs und PDF-Tools das, was ich wollte, sofort funktioniert! (Also habe ich den von T. Verron freundlicherweise vorgeschlagenen Code vor einigen Jahren von meinem init.el entfernt).
Omar

1
@Omar Ich denke der Satz "Beantwortet dies Ihre Frage?" wird automatisch hinzugefügt, wenn Sie eine Frage jetzt als Duplikat markieren? Ich habe es sowieso nicht von Hand eingegeben. Ich habe dies als Duplikat gekennzeichnet, da die verknüpfte Frage als kanonische Antwort auf Fragen der Form "Wie bringe ich PDF-Tools dazu, für X zu arbeiten" dient. Natürlich wurde Ihre Frage gestellt und beantwortet, bevor die andere Frage gestellt wurde, aber ich denke, es ist normal, dies zu tun, wenn eine umfassende allgemeine Antwort eine ältere, spezifischere Frage anspricht.
Tyler

Antworten:


7

Warnung: Schmutzige Umgehung voraus

Da Sie " [pdf-tools] DocView sehr vorziehen ", können Sie davon ausgehen, dass die Verwendung zum Anzeigen aller pdfs akzeptabel ist?

Das folgende Codefragment wechselt das Dokument zu, pdf-view-modewenn doc-viewes mit einem pdfDokument eingegeben wird .

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

Das Verhalten kann aktiviert oder deaktiviert werden, indem setqdie Variable tv/prefer-pdf-toolsauf t oder nil gesetzt wird.


Oh, ich hatte vermisst, dass doc-view-modees einen Haken gab! Ich habe versucht zu werben eww-display-pdfund das hat nicht funktioniert (nicht sicher warum). Ich werde Ihre Lösung ausprobieren und berichten.
Omar

Super, danke! Dies funktioniert (nachdem Sie die Klammer entfernt haben tv/prefer-pdf-tools, was keine Funktion ist).
Omar

3

Sie können einen Hinweis verwenden, um eww-display-pdfdie Definition von doc-view-modevorübergehend zu überschreiben . Mit der neuen nadviceBibliothek ist dies so einfach wie:

(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-modeVerwenden Sie, um zum Original zurückzukehren (advice-remove 'eww-display-pdf 'eww-display-pdf-tools).

Ich habe den Emacs-Fehler 19270 geöffnet , um den EWW-PDF-Modus anpassbar zu machen.


Cool! Ich habe versucht, Ratschläge hinzuzufügen, eww-display-pdfum es zum Laufen zu bringen. pdf-view-mode :afterEs hat seine übliche Arbeit geleistet, aber das hat aus irgendeinem Grund nicht funktioniert. Es ist mir nie in den Sinn gekommen, die Definition der doc-view-modeFunktion auszutauschen (wahrscheinlich, weil ich so an den lexikalischen Bereich gewöhnt bin!).
Omar

Vielen Dank, dass Sie auch den Fehlerbericht geöffnet haben. Ich würde mir vorstellen, dass viele Leute es vorziehen würden, dass eww PDFs in ihrem üblichen externen PDF-Viewer öffnet.
Omar

0

Ich benutze emacs-28, eww benutze mailcap um pdf zu öffnen, passe es an indem ich es mit pdf-tools öffne:

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

Weitere Informationen finden Sie unter Emacs - Hilfe - PDF-Viewer .


Bist du aus der Zukunft? Ich glaube nicht, dass Emacs 27 bereits veröffentlicht wurde (das ist der Pre-Release-Build, den ich verwende), geschweige denn 28.
Omar

Ich verwende Archlinux mit der Entwicklungsversion von Emacs: aur / emacs-git 28.0.50.139945-1 [installiert: 28.0.50.140001-1] (74) (1.07) GNU Emacs. Entwicklungs-Master-Branche.
Xinfa Tang
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.