Emacs से PDF खोलने के लिए बाहरी प्रोग्राम के रूप में बाहरी प्रोग्राम का उपयोग कैसे करें?


42

जब मैं M-x find-fileएक पीडीएफ, यह Emacs में खोला जाता है। हालांकि यह अच्छा है, Emacs के PDF व्यूअर के पास कई विशेषताओं का अभाव है जिनकी मुझे आवश्यकता है और मैं इसके बजाय बाहरी प्रोग्राम में PDF को खोलना पसंद करूंगा। मैं PDF के लिए डिफ़ॉल्ट दर्शक के रूप में बाहरी प्रोग्राम का उपयोग करने के लिए Emacs को कैसे कॉन्फ़िगर कर सकता हूं?

जवाबों:


34

कोशिश करो openwith। निम्नलिखित कोड इसे सक्षम करेगा, और आपको पीडीएफ खोलने की अनुमति देगा evince(अपने पसंदीदा पीडीएफ दर्शक में परिवर्तन):

(require 'openwith)
(openwith-mode t)
(setq openwith-associations '(("\\.pdf\\'" "evince" (file))))

1
मुझे आश्चर्य है कि किसी साधारण चीज़ के लिए तीसरे पक्ष के पैकेज की आवश्यकता है। लेकिन यह काम करता है, धन्यवाद!
tmalsburg

इसकी जरूरत नहीं है (ड्रू का जवाब देखें) लेकिन यह एक अच्छा और साफ तरीका है। ध्यान दें कि यह संभवतः अन्य कार्यक्रमों के साथ संघर्ष करेगा, जैसे कि एक संगीत पाठक (mpg123) यदि आप एक का उपयोग करते हैं।
एहविंस

इस समाधान में समस्याएं हैं। ऐसा प्रतीत होता है कि जब आप गड़बड़ करते हैं तो कुछ पैकेज इसे पसंद नहीं करते हैं find-file। उदाहरण के लिए, संलग्न पीडीएफ के साथ ईमेल भेजने (mu4e के माध्यम से) बाहरी पीडीएफ में संलग्न पीडीएफ को खोलने और विफलताओं को भेजने का कारण बनता है ( विवरण के लिए यहां देखें)।
tmalsburg

1
@tmalsburg: इस एसओ धागे पर एक नज़र है, जो ईमेल अटैचमेंट और उस विशेष उपयोग के मामले में समाधान के साथ समस्या पर चर्चा कर रहा है।
दान

मैंने अभी-अभी आदेश दिया कि openwith-modeइसे बंद करने के लिए काम नहीं करने वाले कमांड को सलाह देने के लिए थोड़ा सा कोड लिखें : यह देखें ।
उमर

21

यदि आप पीडीएफ को कई विशेषताओं के साथ देखना चाहते हैं (खोज को हाइलाइट करना, चयन को हाइलाइट करना, एनोटेट, सामग्री पेड़), पीडीएफ-टूल्स का उपयोग करें । जैसा कि आप डेमो में देख सकते हैं , मैं हाइलाइटिंग के साथ Isearch का उपयोग कर सकता हूं। Emacs अब मेरा पसंदीदा पीडीएफ रीडर है। आप बुकमार्क (+) का उपयोग करके विशिष्ट पीडीएफ पेज को बुकमार्क भी कर सकते हैं।

संपादित करें : यदि आप उपयोग करते हैं helmऔर बाहरी प्रोग्राम का उपयोग करना चाहते हैं, तो helmबाहरी फ़ाइल खोलने के लिए एक्शन मेनू में पहले से ही एक है Open file externally C-c C-x. C-u to choose again:। यह क्या करता है कि यह आपके सिस्टम में सभी उपलब्ध कार्यक्रमों की एक सूची प्रदान करता है और आपको चयन करने के लिए एक अच्छा हेल्म इंटरफ़ेस के साथ प्रस्तुत करता है; एक बार जब आप चुनते हैं, तो जब तक आप C-uएक नया चयन करने के लिए उपसर्ग तर्क के साथ कमांड नहीं चलाते हैं, तब तक यह याद रहता है ।


3
+1 उल्लेख करने के लिए मैं आपको पर्याप्त धन्यवाद नहीं दे सकता हूँ pdf-tools!! अद्भुत पैकेज। इसे प्यार करना! आपका डेमो बहुत अच्छा है, भले ही यह केवल क्या संभव है की सतह को खरोंच करता है ... :)
itsjeyd

पीडीएफ-उपकरण मानक पैकेज प्रबंधकों के माध्यम से उपलब्ध नहीं हैं, हालांकि, और स्थापित प्रक्रिया emacs 24.4 के साथ काम करने के लिए प्रतीत नहीं होती है: /
क्लेमेंट

इससे मेरा काम बनता है। लेकिन आपको pdf-toolsरेपो को क्लोन करना होगा और C भाग को संस्थापित करना होगा और कहीं भी अपने Emacs को बाइनरी देख सकते हैं, Emacs Lisp भाग को स्थापित करने और उपयोग करने से पहले।
Tu Do

क्या pdf-tools आपको हाइलाइट करने देता है (यानी पीले रंग में) शब्द और वाक्यांश या नहीं?
गरमागरम

11

आपने पूछा find-file। अन्य लोगों (उदाहरण के लिए, दान) इसके बारे में क्या कहते हैं, इसके अलावा, यह भी विकल्प में फ़ाइल प्रकार (जैसे विस्तार) से जुड़े एक एप्लिकेशन का उपयोग करके फ़ाइलों को खोलने के बारे में जानना सार्थक है dired-guess-shell-alist-user। और यदि आप एमएस विंडोज पर Emacs का उपयोग करते हैं, तो यह जानना सार्थक है कि विंडोज फ़ाइल संघों का उपयोग करके फ़ाइल कैसे खोलें।

dired-guess-shell-alist-userमानक लाइब्रेरी लोड करने के बाद विकल्प उपलब्ध है dired-x.el। एक पीडीएफ फाइल की डिफ़ॉल्ट एसोसिएशन को चर में परिभाषित किया गया है dired-guess-shell-alist-default, और यह प्रोग्राम है xpdf(यूनिक्स और जीएनयू / लिनक्स पर उपलब्ध है)। dired-guess-shell-alist-userउदाहरण के लिए, आप विकल्प का उपयोग करके , इस संगति को जोड़कर Adobe Acrobat Reader के साथ जोड़ सकते हैं ("\.pdf$" . "AcroRd32.exe"):।

तब आप केवल उपयोग करके Dired में एक पीडीएफ फाइल खोल सकते हैं !। यह "अनुमान" के रूप में डिफ़ॉल्ट प्रोग्राम प्रदान करता है, जिसे आप दोहरा कर एक्सेस कर सकते हैं M-n। तो !द्वारा पीछा M-nआप शेल कमांड दे देंगे AcroRd32.exe, तो बिंदु एक PDF फ़ाइल नाम पर और अगर उस आदेश / कार्यक्रम regexp साथ जुड़ा हुआ है \.pdf$

Dired के अलावा, आप फ़ाइल संघों का उपयोग dired-guess-shell-alist-userएक बुकमार्क फ़ाइल हैंडलर के रूप में कर सकते हैं, अर्थात् , यदि आप लाइब्रेरी बुकमार्क + का उपयोग करते हैं, तो पीडीएफ फाइल का किसी भी बुकमार्क के लिए पीडीएफ फाइलों पर प्रभाव पड़ता है । का मौजूदा मान dired-guess-shell-alist-userविकल्प के डिफ़ॉल्ट मान के रूप में उपयोग किया जाता है bmkp-default-handlers-for-file-types, जो इसे नियंत्रित करता है।

आप विकल्पों के बारे में सोच सकते हैं dired-guess-shell-alist-userऔर bmkp-default-handlers-for-file-typesके रूप में कुछ हद तक के अनुरूप auto-mode-alist। लेकिन वे बफर मोड में मैप करने के बजाय फ़ाइल नाम के पैटर्न को कार्रवाई के लिए फाइल करते हैं। और वे तभी प्रभावी होते हैं जब आप कुछ आदेशों का उपयोग करते हैं।

यदि आप MS Windows का उपयोग करते हैं, तो आप इसके बजाय (या भी) मौजूदा Windows फ़ाइल संघों का लाभ उठा सकते हैं जब आप किसी फ़ाइल को एक बुकमार्क में "Dire" या "जंप" खोलते हैं। इसके लिए आपको लाइब्रेरी चाहिए w32-browser.el

Dired के लिए, आपको लाइब्रेरी Dired + की भी आवश्यकता है - Dired में Windows फ़ाइल एसोसिएशन का उपयोग करना देखें । बुकमार्क के लिए, आपको बुकमार्क + की भी आवश्यकता होती है - विंडोज फाइल एसोसिएशनों का उपयोग करके बुकमार्क और आप बुकमार्क के साथ खुलने वाली फाइलों को नहीं देख सकते


3

मैं उपयोग कर रहा हूँ धावक । यहाँ मेरे विन्यास फ़ाइल का एक अंश है

    (defun my:open-file-with-dired (file)
      "Ask dired how it would open FILE.
This code is useful if dired is well configured to open files
with external applications. I recommend using the `runner`
package to do so."
      (use-package dired-aux)
      (dired-do-async-shell-command
       (dired-guess-shell-command (format  "Open %s " file) (list file))
       0
       (list file)))

    (add-to-list 'org-file-apps '(t . (my:open-file-with-dired file)))
    (add-to-list 'org-file-apps '("\\.png\\'" . default))

0

बिना किसी प्लग इन के इसे प्राप्त करने का मेरा तरीका निम्नलिखित है। मैं Ubuntu 16.04 LTS के तहत Emacs 25.3 चलाता हूं। यदि आपका OS macOS या Windows है, तो आपको निश्चित xdg-open रूप से यहां परिभाषित पहले फ़ंक्शन को बदलने की आवश्यकता है। मुझे यह लिंक शुरुआती बिंदु के रूप में बहुत उपयोगी लगा।

(defun xdg-open (filename)
  (interactive "fFilename: ")
  (let ((process-connection-type))
    (start-process "" nil "xdg-open" (expand-file-name filename))))

(defun find-file-auto (orig-fun &rest args)
  (let ((filename (car args)))
    (if (cl-find-if
         (lambda (regexp) (string-match regexp filename))
         '("\\.pdf\\'" "\\.docx?\\'"))
        (xdg-open filename)
      (apply orig-fun args))))

(advice-add 'find-file :around 'find-file-auto)

उपरोक्त कोड लोड होने के बाद, जब आप C-x C-fपीडीएफ और वर्ड फाइल के लिए प्रेस करते हैं, तो यह सिस्टम डिफॉल्ट ऐप का उपयोग करके स्वचालित रूप से फाइल को खोल देगा।

मैं वास्तव में Emacs द्वारा प्रदान की गई सलाह तंत्र को देखता हूं, (elisp) सलाह देने वाले कार्य । एक संगत तरीके से अस्तित्व समारोह की सलाह देकर, मैं C-x C-fनए फ़ंक्शन की तरह सामान्य कुंजी को फिर से बाइंड करने से बचता हूं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.