PDF'leri Emacs'tan açmanın varsayılan yolu olarak harici bir program nasıl kullanılır?


42

Ben M-x find-filebir PDF olduğunda Emacs'ta açılır. Bu güzel olsa da, Emacs'in PDF görüntüleyicisi ihtiyacım olan birçok özelliğe sahip değil; PDF'leri bunun yerine harici bir programda açmayı tercih ediyorum. Emacs'ı, harici bir programı, PDF'ler için varsayılan görüntüleyici olarak kullanacak şekilde nasıl yapılandırabilirim?

Yanıtlar:


34

Dene openwith. Aşağıdaki kod etkinleştirir ve ile PDF'leri açmanıza izin verir evince(en sevdiğiniz PDF görüntüleyicide değişiklik yapın):

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

1
Bu kadar basit bir şey için üçüncü parti bir pakete ihtiyaç duyulduğuna şaşırdım. Ama işe yarıyor, teşekkür ederim!
tmalsburg

Gerek yok (Drew'un cevabına bakınız) ama bunu yapmanın güzel ve temiz bir yoludur. Kullanıyorsanız, bir müzik okuyucusu (mpg123) gibi diğer programlarla çakışabileceğini unutmayın.
Ehvince,

Bu çözümün sorunları var. Görünüşe göre bazı paketler uğraşırken hoşuna gitmiyor find-file. Örneğin, ekli PDF'lere sahip e-postaların gönderilmesi (mu4e yoluyla) ekli PDF'nin harici düzenleyicide açılmasına ve gönderilmesinin başarısız olmasına neden olur ( ayrıntılar için buraya bakın).
tmalsburg

1
@tmalsburg: e-posta ekleri ile ilgili sorunu tartışan ve bu özel kullanım durumunda bir çözümü tartışan bu SO başlığına bir göz atın .
Dan

Sadece ile işi yok komutları tavsiyelerde kod biraz yazdım openwith-modebunu kapatmak için: Bunu görmek özünü .
Omar

21

PDF'yi birçok özelliğe sahip görüntülemek istiyorsanız (arama vurgulama, seçimi vurgulama, açıklama ekleme, içerik ağacı), pdf-tools kullanın . Demoda gördüğünüz gibi , Isearch'ü vurgulayarak kullanabilirim. Emacs şimdi en sevdiğim PDF okuyucu. Özel PDF sayfasını Yer İşareti (+) kullanarak da yer imlerine ekleyebilirsiniz.

DÜZENLEME : Eğer kullanırsanız helmve dış programını kullanmak istiyorum, helmzaten dış dosyayı açmak için eylem menüsünde birine sahiptir: Open file externally C-c C-x. C-u to choose again. Sisteminizdeki tüm mevcut programların bir listesini sunması ve size aralarından seçim yapabileceğiniz güzel bir Helm arayüzü sunması; seçtiğinizde, Helm C-uyeni bir tane seçmek için komutu önek argümanıyla çalıştırana kadar hatırlar .


3
+1 Bahsettiğiniz için size yeterince teşekkür edemem pdf-tools!! İNANILMAZ paket. Sevdim!
Demonuz

pdf-tools standart paket yöneticileri tarafından da kullanılamıyor ve yükleme prosedürü emacs ile çalışmıyor gibi görünüyor 24.4: /
Clément

Benim için çalışıyor. Ancak, pdf-toolsdepoyu klonlamanız ve Emacs Lisp bölümünü kurmadan ve kullanmadan önce Emacs'ınızın ikiliyi görebileceği her yerde C bölümünü derlemeniz ve yüklemeniz gerekir.
Tu Do

Pdf tools, sözcükleri ve cümleleri vurgulamanıza (yani sarı renkte) vurgulamanıza izin veriyor mu?
incandescentman

11

Sen sordun find-file. Başkalarının (örneğin Dan) bunun hakkında söylediklerine ek olarak, seçenek içinde dosya türüyle (ör. Uzantı) ilişkili bir uygulamayı kullanarak dosyaları açmayı da bilmek faydalı olacaktır dired-guess-shell-alist-user. Ve eğer MS Windows'ta Emacs kullanıyorsanız, Windows dosya ilişkilendirmelerini kullanarak bir dosyanın nasıl açılacağını bilmek faydalı olacaktır.

dired-guess-shell-alist-userStandart kütüphane yükledikten sonra seçenek kullanılabilir dired-x.el. Bir PDF dosyasının varsayılan ilişkisi değişkende tanımlanmıştır dired-guess-shell-alist-defaultve programdır xpdf(UNIX ve GNU / Linux'ta mevcuttur). Seçeneği kullanarak dired-guess-shell-alist-userEğer, örneğin, alist bu ilişkiyi ekleyerek Adobe Acrobat Reader ile yerine ilişkilendirebilir: ("\.pdf$" . "AcroRd32.exe").

Ardından Dired'da bir PDF dosyasını yalnızca kullanarak açabilirsiniz !. Bu, varsayılan programları tekrarlayarak erişebileceğiniz "tahminler" olarak sunar M-n. Yani !takip M-nsize kabuk komutu verecek AcroRd32.exenoktası PDF dosya adını ve o komut / program Normal ifadeyle ilişkili olup olmadığını ise \.pdf$.

Dired uygulamasına ek olarak, dired-guess-shell-alist-userkitaplık Yer İşareti + kullanıyorsanız , dosya ilişkilerini yer işareti dosya işleyicisi olarak kullanabilirsiniz; yani, PDF dosya ilişkilendirmesinin PDF dosyalarındaki yer imleri için geçerli olmasını sağlayın . Geçerli değeri , bunu kontrol eden dired-guess-shell-alist-userseçeneğin varsayılan değeri olarak kullanılır bmkp-default-handlers-for-file-types.

Seçenekleri dired-guess-shell-alist-userve bmkp-default-handlers-for-file-typesbiraz benzer şekilde düşünebilirsiniz auto-mode-alist. Ancak dosya adı kalıplarını arabellek modlarıyla eşleştirmek yerine dosya eylemleriyle eşleştirirler. Ve yalnızca belirli komutları kullandığınızda etkili olurlar.

MS Windows kullanıyorsanız, o zaman (veya ayrıca) Dired'da bir dosyayı açtığınızda veya bir yer imine "atladığınızda" mevcut Windows dosya ilişkilerinden yararlanabilirsiniz . Bunun için kütüphaneye ihtiyacınız var w32-browser.el.

Dired için ayrıca Dired + kütüphanesine de ihtiyacınız vardır - bkz . Dired'da Windows Dosya İlişkilerini Kullanma . Yer imleri için Yer İşareti + 'ye de ihtiyacınız vardır - bkz . Emacs ile Ziyaret Edemediğiniz Dosyaları İşaretleme ve Windows Dosya İlişkilerini Kullanarak Yer İşaretlerini Açma .


3

Ben kullanıyorum koşucu . Yapılandırma dosyamın bir kısmı:

    (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

Herhangi bir eklenti olmadan bunu başarmanın yolu şudur. Emacs 25.3'ü Ubuntu 16.04 LTS altında çalıştırıyorum. İşletim sisteminiz macOS veya Windows ise, xdg-open burada tanımlanan ilk işlevi kesinlikle değiştirmeniz gerekir . Bu bağlantıyı başlangıç ​​noktası olarak çok faydalı buldum .

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

Yukarıdaki kod yüklendikten sonra, C-x C-fPDF ve word dosyası için bastığınızda , varsayılan sistem uygulamasını kullanarak dosyayı otomatik olarak açacaktır.

Emacs tarafından sağlanan tavsiye mekanizmalarını gerçekten seviyorum, bkz. (Elisp) Tavsiye İşlevleri . Var olan işlevi uyumlu bir şekilde önererek, C-x C-fyeni gibi ortak tuşların yeniden bağlanmasından kaçınırım .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.