2011-07-27 13 views
25

मैं डॉक व्यू मोड के बजाय evd के साथ एक पीडीएफ खोलना चाहता हूं। क्या 'evince' जैसे विशिष्ट कमांड के साथ फ़ाइल खोलने की संभावना है?मैं Emacs थका हुआ मोड में बाहरी रूप से फ़ाइलों को कैसे खोल सकता हूं?

उत्तर

19

हां। फ़ाइल पर शेल कमांड चलाने के लिए ! का उपयोग करें।

evince के मामले में, & का उपयोग करना बेहतर है, हालांकि, जो कमांड को अतुल्यकालिक रूप से चलाएगा, इसलिए आपके पास पीडीएफ खुला होने पर भी एमएसीएस उपयोग योग्य होंगे।

3

आप फ़ाइल खोलने के लिए ! का उपयोग कर सकते हैं और फिर एक आदेश निर्दिष्ट कर सकते हैं।

+4

और 'और' बजाय '!' अगर आपको लगता है कि आदेश एसिंक्रोनस रूप से चलाना चाहते हैं खोलने के लिए। – Thomas

14

ऐसा करने के लिए एक और तरीका है। मैं OpenWith पुस्तकालय का सुझाव देता हूं। आपके मामले के लिए सेटअप है कि तरह लग रहे हो सकता है:

(add-to-list 'load-path "/path/to/downloaded/openwith.el") 
(require 'openwith) 
(setq openwith-associations '(("\\.pdf\\'" "evince" (file)))) 
(openwith-mode t) 

यह फ़ाइल हैंडलर कि dired और find-file दोनों से काम करेंगे निर्धारित करता है।

+3

कम से कम मैक ओएसएक्स में, मैंने 'evince' को 'ओपन' के साथ बदल दिया, और फिर यह डिफ़ॉल्ट सॉफ़्टवेयर (मेरे मामले में 'स्कीम') का उपयोग करता है। – Dror

+3

ध्यान दें कि इस मामले में आप शेल कमांड चलाने के लिए '!' या '&' का उपयोग करने के बजाय फ़ाइल नाम पर 'आरईटी' दबाएंगे।आप ओपन-एसोसिएशन पर सेटक का उपयोग करके सभी अंतर्निहित एसोसिएशन भी खो देते हैं। .mp3, .jpg, ... के लिए एसोसिएशन में छोड़ते समय केवल पीडीएफ एसोसिएशन को बदलने का बेहतर तरीका हो सकता है? –

+0

हां, दूसरों को खोए बिना पीडीएफ एसोसिएशन को बदलने का एक आसान तरीका है: एम-एक्स कस्टमाइज़-ग्रुप आरईटी ओपन के साथ आरईटी – Jorge

8

इसे आजमाएं।

(defun dired-open-file() 
    "In dired, open the file named on this line." 
    (interactive) 
    (let* ((file (dired-get-filename nil t))) 
    (message "Opening %s..." file) 
    (call-process "gnome-open" nil 0 nil file) 
    (message "Opening %s done" file))) 
+3

यह अच्छी तरह से काम किया। मैं केडीई जैसे किसी अन्य जीयूआई में उपयोग के मामले में 'xdg-open' के साथ 'gnome-open' को प्रतिस्थापित करता हूं। –

3

ध्यान दें कि आप dired में उपयोग कर nohup [विकिपीडिया] द्वारा Emacs बाहर निकलने के बाद जिंदा प्रक्रिया रखने के लिए, तो बात रख सकते हैं एक एकल फाइल पर:

C-u ! nohup evince ? & 

जो बनाता है एक Persistent Processes [EmacsWiki] ।

0

OSX बॉक्स पर डायर मोड से किसी भी बाहरी एप्लिकेशन के साथ खुला है, C-c o के कीबोर्ड शॉर्टकट का उपयोग करते हुए कर्सर एक फ़ाइल के साथ लाइन पर है जब उपयोगकर्ता बाहरी एप्लिकेशन के साथ खोलना चाहता है - ए दूसरा डायर बफर /Applications फ़ोल्डर में खोला गया है और एंटर कुंजी बाहरी एप्लिकेशन का चयन करती है। [एकाधिक फाइलों का चयन इस उत्तर के दायरे से बाहर है, हालांकि, अगर किसी को दिलचस्पी है तो मैंने के लिए परिभाषा शामिल की है। मैं भी Finder.app या Dock.app या स्पॉटलाइट की तरह कुछ का उपयोग कर के लिए एक विकल्प के रूप में एक बाहरी अनुप्रयोग खोलने के लिए विकल्प को शामिल किया है - dired में /Applications फ़ोल्डर से, RET कुंजी करने के लिए विकल्पों के साथ उपयोगकर्ता की पेशकश करेगा या तो खोलने आवेदन बाह्य या पैक आवेदन फ़ोल्डर में प्रवेश]

एक दूसरी विधि (equal (file-name-extension input-filename) ".pdf")) की तरह कुछ का उपयोग की स्थिति स्थापित करने के लिए और start-process . . . का उपयोग चयनित फ़ाइल को खोलने के लिए एक विशेष बाहरी अनुप्रयोग को सक्रिय करने के लिए हो सकता है -।, (start-process "pdf-with-skim" nil "open" "-a" "/Applications/Skim.app/Contents/MacOS/Skim" input-filename) जैसे। इसे उप-विकल्प (उदा।, एडोब, स्किम या पूर्वावलोकन) के साथ काफी विस्तृत किया जा सकता है, और इसे string-match फ़ंक्शन या विभिन्न प्रकार के फ़ाइल एक्सटेंशन का उपयोग करने के लिए भी बनाया जा सकता है। यह दूसरा दृष्टिकोण स्थापित किए गए विशेष कार्यक्रमों के आधार पर उपयोगकर्ता की व्यक्तिगत वरीयताओं के प्रति अधिक तैयार है, जबकि पहले विकल्प (नीचे) किसी भी स्थापित बाहरी एप्लिकेशन तक पहुंचने के लिए उपयोग किया जा सकता है।

(require 'dired) 

(defun dired-read-file-name (&optional directory) 
    (if directory 
     (dired directory) 
    (dired nil)) 
    (let (output-filename) 
     (recursive-edit) 
     output-filename)) 

;; Open with external application. 
(defvar open-with-variable nil) 
(define-key dired-mode-map (kbd "C-c o") (lambda() (interactive) 
    (setq open-with-variable t) 
    (let* (
     (lawlist-filename (dired-get-file-for-visit)) 
     (application (dired-read-file-name "/Applications"))) 
    (start-process "external" nil "open" "-a" application lawlist-filename) 
    (setq open-with-variable nil)))) 

;; select file or directory. 
(define-key dired-mode-map (kbd "<return>") (lambda() (interactive) 
    (let* (
    (input-filename 
     (if (or (re-search-backward "^*" nil t) 
      (re-search-forward "^*" nil t)) 
     (dired-get-marked-files) 
     (dired-get-file-for-visit))) 
    (dired-buffer-name (buffer-name))) 
    (cond 
    ;; open file 
    ((and (not (file-directory-p input-filename)) 
     (file-exists-p input-filename) 
     (not (equal input-filename (concat (file-name-directory input-filename) "."))) 
     (not open-with-variable)) 
     (kill-buffer dired-buffer-name) 
     (find-file input-filename)) 
    ;; open with external application 
    ((and (file-directory-p input-filename) 
     (not (equal input-filename (concat (file-name-directory input-filename) "."))) 
     open-with-variable 
     (equal (file-name-extension input-filename) "app")) 
     (setq output-filename input-filename) 
     (kill-buffer dired-buffer-name) 
     (throw 'exit nil)) 
    ;; Enter the directory; or, open an application 
    ((and (file-directory-p input-filename) 
     (not (equal input-filename (concat (file-name-directory input-filename) ".")))) 
     (if (equal (file-name-extension input-filename) "app") 
     (progn 
      (message "[o]pen %s" (file-name-nondirectory input-filename)) 
      (let* ((open-or-enter (read-char-exclusive))) 
      (cond 
       ((eq open-or-enter ?o) 
       (start-process "application" nil "open" "-a" input-filename) 
       (kill-buffer dired-buffer-name)) 
       (t 
       (dired-find-file) 
       (goto-char (point-min)) 
       (re-search-forward " \\.\\.$" nil t) 
       (kill-buffer dired-buffer-name))))) 
     (dired-find-file) 
     (goto-char (point-min)) 
     (re-search-forward " \\.\\.$" nil t) 
     (kill-buffer dired-buffer-name))))))) 
1

विंडोज़ में, मैंने उपयोग बंद कर दिया! और कमांड "एक्सप्लोरर" पीडीएफ/वर्ड/एक्सेल ...

+0

मुझे लगता है कि "शुरूआत" भी काम करना चाहिए और छोटा है। –

संबंधित मुद्दे