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.