EmacsからPDFを開くデフォルトの方法として外部プログラムを使用する方法は?


42

とき、私はM-x find-filePDF、それはEmacsで開いています。これは素晴らしいことですが、EmacsのPDFビューアーには必要な多くの機能が欠けているため、代わりに外部プログラムでPDFを開くことを好みます。PDFのデフォルトビューアーとして外部プログラムを使用するようにEmacsを構成するにはどうすればよいですか?

回答:


34

試してくださいopenwith。次のコードはそれを有効にし、PDFを開くことができますevince(お好みのPDFビューアーに変更します):

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

1
そのような単純なことを行うには、サードパーティのパッケージが必要であることに驚いています。しかし、うまくいきます、ありがとう!
tmalsburg

それは必要ありません(Drewの答えを参照)が、それはそれを行うための素晴らしくてきれいな方法です。使用する場合、音楽リーダー(mpg123)などの他のプログラムと競合する可能性があることに注意してください。
エビンス14年

このソリューションには問題があります。いくつかのパッケージは、を台無しにすると気に入らないようですfind-file。たとえば、添付されたPDFを含む電子メールを(mu4eを介して)送信すると、添付されたPDFが外部エディターで開かれ、送信は失敗します(詳細については、こちらを参照)。
tmalsburg

1
@tmalsburg:このSOスレッドを見て、電子メールの添付ファイルの問題とその特定のユースケースの解決策について説明します。
ダン

無効なコマンドを無効にするためのコマンドをアドバイスするコードを少し書きました。openwith-modeこの要点をご覧ください。
オマー14

21

多くの機能(検索の強調表示、選択の強調表示、注釈、コンテンツツリー)を含むPDFを表示する場合は、pdf-toolsを使用しますデモでわかるように強調表示を使用してIsearchを使用できます。Emacsは今では私のお気に入りのPDFリーダーです。Bookmark(+)を使用して特定のPDFページをブックマークすることもできます。

編集helm外部プログラムを使用し、使用したい場合helmは、外部ファイルを開くためのアクションメニューに既にあります:Open file externally C-c C-x. C-u to choose again。システムで利用可能なすべてのプログラムのリストを提供し、選択するための素敵なHelmインターフェイスを提供します。選択すると、Helmは、プレフィックス引数C-uを指定してコマンドを実行して新しいコマンドを選択するまで、それを記憶します。


3
+1言及してくれてありがとうpdf-tools!素晴らしいパッケージ。大好きです!デモは、可能なことのほんの一部に過ぎませんが、素晴らしいものです... :)
itsjeyd 14年

PDF-ツールは、しかし標準パッケージマネージャを介して利用可能ないないようだ、とインストール手順は、Emacs 24.4で動作していないよう:/
クレマン

わたしにはできる。ただしpdf-tools、Emacs Lispパーツをインストールして使用する前に、リポジトリを複製し、Emacsがバイナリを見ることができる場所にCパーツをコンパイルしてインストールする必要があります。
火ドゥ

pdf-toolsを使用すると、単語やフレーズをハイライト(黄色で)できますか?
白熱

11

について尋ねましたfind-file。他の人(例:ダン)がそれについて言っていることに加えて、optionのファイルタイプ(例:拡張子)に関連付けられたアプリケーションを使用してファイルを開くことについて知ることは価値がありますdired-guess-shell-alist-user。また、MS WindowsでEmacsを使用する場合、Windowsファイルの関連付けを使用してファイルを開く方法を知っておくと役立ちます。

オプションdired-guess-shell-alist-userは、標準ライブラリをロードした後に使用できますdired-x.el。PDFファイルのデフォルトの関連付けはvariable dired-guess-shell-alist-defaultで定義されており、プログラムxpdf(UNIXおよびGNU / Linuxで使用可能)です。オプションdired-guess-shell-alist-userを使用すると、たとえば、この関連付けをalist:に追加することにより、代わりにAdobe Acrobat Readerに関連付けることができます("\.pdf$" . "AcroRd32.exe")

次に、を使用するだけで、DiredでPDFファイルを開くことができます!。これにより、デフォルトのプログラムが「推測」として提供されますM-n。これにはを繰り返してアクセスできます。だから、!続くM-nあなたのシェルコマンドを与えるAcroRd32.exeポイントはPDFファイル名に及び、そのコマンド/プログラムが正規表現に関連付けられている場合であれば\.pdf$

Diredに加えて、ファイルの関連付けをdired-guess-shell-alist-userブックマークファイルハンドラーとして使用できます。つまり、ライブラリBookmark +を使用している場合、PDFファイルへのブックマークに対してPDFファイルの関連付けを有効にすることができます。の現在の値は、これを制御するdired-guess-shell-alist-useroptionのデフォルト値として使用されますbmkp-default-handlers-for-file-types

あなたはオプションdired-guess-shell-alist-userを考えることができますしbmkp-default-handlers-for-file-types、やや似ていauto-mode-alistます。ただし、ファイル名のパターンをバッファーモードにマッピングするのではなく、ファイルアクションにマッピングします。また、特定のコマンドを使用する場合にのみ有効になります。

MS Windowsを使用している場合、Diredでファイルを開くか、ブックマークに「ジャンプ」するときに、代わりに(または)既存のWindowsファイルの関連付けを利用できます。これにはライブラリが必要ですw32-browser.el

Diredの場合、ライブラリDired +も必要です-「Diredでの Windowsファイルの関連付けの使用参照してください。ブックマークについては、Bookmark +も必要です-Emacsでアクセスできないファイルのブックマークおよび 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-fPDFおよびワードファイルを押すと、システムのデフォルトアプリを使用してファイルが自動的に開きます。

私はEmacsが提供するアドバイスメカニズムが本当に好きです。(elisp)Advising Functionsを参照してください。既存の機能に互換性のある方法で助言することによりC-x C-f、新しい機能のように共通キーを再バインドすることを避けます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.