ฉันสามารถกำหนดค่า 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 (pdf-view-mode) ใน emacs?
ไทเลอร์

@ ไทเลอร์ฉันไม่แน่ใจ แต่ฉันจะไม่ตรวจสอบว่าเป็นไปได้หรือไม่เพราะ (1) คำถามนี้ตอบแล้วในปี 2014 ตามที่คุณยืนยันโดยเลื่อนลงไปที่คำตอบที่ฉันยอมรับ (2) คำตอบนั้นไม่จำเป็นในทุกวันนี้เนื่องจากมี Emacs และเครื่องมือ pdf รุ่นใหม่กว่าสิ่งที่ฉันต้องการใช้งานได้ทันที! (ดังนั้นฉันลบรหัสที่กรุณาแนะนำโดย T. Verron จาก init.el ของฉันเมื่อสองสามปีที่แล้ว)
โอมาร์

1
@Omar ฉันคิดว่าวลี "นี่ตอบคำถามของคุณหรือไม่?" ได้รับการเพิ่มโดยอัตโนมัติเมื่อคุณตั้งค่าสถานะคำถามซ้ำกันหรือไม่ ฉันไม่ได้ป้อนมันด้วยมือเลย ฉันตั้งค่าสถานะนี้ซ้ำซ้อนเพราะคำถามที่เชื่อมโยงทำหน้าที่เป็นคำตอบที่ยอมรับได้สำหรับคำถามของแบบฟอร์ม "ฉันจะใช้เครื่องมือ pdf เพื่อทำงานกับ X ได้อย่างไร" แน่นอนคำถามของคุณถูกถามและตอบก่อนคำถามอื่น ๆ คือ แต่ฉันคิดว่าเป็นเรื่องปกติที่จะทำเช่นนี้เมื่อคำตอบทั่วไปที่ครอบคลุมตอบคำถามที่เก่ากว่าและเจาะจงกว่า
ไทเลอร์

คำตอบ:


7

คำเตือน: การทำงานสกปรกไปข้างหน้า

เนื่องจากคุณ " ชอบ [pdf-tools] to DocView มาก " ปลอดภัยหรือไม่ที่จะคิดว่าการใช้มันเพื่อดู PDF ทั้งหมดเป็นที่ยอมรับหรือไม่

ข้อมูลโค้ดต่อไปนี้จะเปลี่ยนเอกสารเป็น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-ing ตัวแปรtv/prefer-pdf-toolsเพื่อ t หรือศูนย์


โอ้ฉันคิดถึงที่doc-view-modeมีตะขอ! ฉันพยายาม adivising 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 สามารถปรับแต่งได้


เย็น! ฉันพยายามเพิ่มคำแนะนำในeww-display-pdfการทำให้มันทำงานpdf-view-mode :afterได้ตามปกติ แต่นั่นไม่ได้ด้วยเหตุผลบางอย่าง ฉันไม่เคยเปลี่ยนคำจำกัดความของdoc-view-modeฟังก์ชั่น (อาจเป็นเพราะฉันคุ้นเคยกับขอบเขตคำศัพท์!)
โอมาร์

ขอบคุณที่เปิดรายงานบั๊กด้วย ฉันนึกภาพผู้คนจำนวนมากต้องการ eww เปิด PDF ในโปรแกรมดู PDF ภายนอกที่เป็นจารีตประเพณี
โอมาร์

0

ฉันใช้ emacs-28 eww ใช้ mailcap เพื่อเปิด pdf กำหนดเองโดยเปิดด้วยเครื่องมือ pdf:

(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) Emacs GNU สาขาพัฒนาต้นแบบ
xinfa Tang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.