2012-01-12 4 views
27

組織モードでは、PDFファイルへのリンクを開こうとすると何も起こりません。また、C-c C-e dをLaTeXとしてエクスポートしてPDFに処理して開くと、PDFは生成されますが開かれません。 Evinceで組織モードのオープンPDFファイルを作成するにはどうすればよいですか?Evinceで組織モードで開いているPDFファイルを作成するにはどうすればよいですか?

私は、Ubuntu 11.10のGNU Emacs 23.3.1とEvince 3.2.1でOrg-mode 7.6を使用しています。

答えて

9

別の可能な構造になり、このために働くことができます:醜いようだ

別のオプションは、代わりにデフォルト値を検索し、それらすべてのことを設定しますが、PDFファイルの値を変更することですadd-hookではなくeval-after-loadを使用してください。起動時に一度だけ値を設定するので、(orgを定期的にリロードしない限り)追加されているかどうか心配する必要はありません。

setcdrと組み合わせてリストから削除してから再度追加することを避けてifを追加すると、値を追加したり変更したりすることができます。 ifは、デフォルトでリストにない値に対してのみ必要です。行の下のどこかで競合が発生しないようにするためです。

(eval-after-load "org" 
    '(progn 
    ;; .txt files aren't in the list initially, but in case that changes 
    ;; in a future version of org, use if to avoid errors 
    (if (assoc "\\.txt\\'" org-file-apps) 
     (setcdr (assoc "\\.txt\\'" org-file-apps) "notepad.exe %s") 
     (add-to-list 'org-file-apps '("\\.txt\\'" . "notepad.exe %s") t)) 
    ;; Change .pdf association directly within the alist 
    (setcdr (assoc "\\.pdf\\'" org-file-apps) "evince %s"))) 

明確化

eval-after-loadための編集のみ(require 'org)が呼び出されたブロックを評価します。 orgが既にロードされている場合、すぐに評価されます(私は誤ってライブラリがロードされるたびに実行されると考えましたが、初めてのようです)。 add-hookeval-after-loadの違いはhereです。 org-file-apps以来

は、あなたがそれらを設定した場合、組織がロードされる前に、あなたは(2番目の(醜い)溶液中で、デフォルトの値を含む)最初からリストを構築する場合、それはあなたができただけでsetqで、値を変更しませんdefcustomですあなたのinit.elとすべてがうまくいくでしょう。また、変更が上書きされないことを意味します。

(if (assocをPDFエントリに追加しても問題はありませんが、PDFがデフォルトのorg-file-appsから削除されてもそれが確実に削除されることを保証します。 PDFを削除しても失敗しない唯一のソリューションは、2番目のソリューションです。他の人はすべて、そのエントリーが1つの形式または別の形式で存在すると仮定します。

+0

私は時々、セッションのバッファにorg-modeを数回ロードします。それがこの解決策に影響しますか?それとも、 'org-reload'を使うのですか?また、 '(if(assoc'構造体を追加して将来の証明にすることができますか? –

+0

@NNは、その質問に答えるべき編集内容をいくつか追加しました) –

+0

この解決策はこれまでのところ最もエレガントです。 –

21
M-x customize-variable [RET] org-file-apps [RET] 

orgがシステムのデフォルトを使用している場合は、./mailcapファイルを編集する必要があります。この行を追加すること

試してみてください。

application/pdf; /usr/bin/evince %s 
+0

'M-x customize-variable [RET] org-file-apps [RET]'を使わなくても、自分の.emacsに追加できる行はありますか? –

+0

'org-file-apps'は、' find-variable'に従って '(" \\。pdf \\ '"。デフォルト)'を含みます。 –

+0

'(setq org-file-apps ...)'の行に沿って.emacsに何かを追加することもできますが、あなたのニーズに合わせて変数を設定しない理由はわかりません。あなたが 'F1 v org-file-apps'を試してみると、最初の例はこの' Example:( "pdf"。 "evince%s")のevonsでPDFを開くことです。それを明示するように設定してみてください。 – certainly

7

あなたはhttps://stackoverflow.com/a/3985552/789593に似た構文を使用しますが、PDFファイルと示すに適合させることができます。あなたがしたいのはリストorg-file-appsを変更することです。これは、あなたの.emacsに以下を追加することによって行うことができます。

;; PDFs visited in Org-mode are opened in Evince (and not in the default choice) https://stackoverflow.com/a/8836108/789593 
(add-hook 'org-mode-hook 
     '(lambda() 
     (delete '("\\.pdf\\'" . default) org-file-apps) 
     (add-to-list 'org-file-apps '("\\.pdf\\'" . "evince %s")))) 

これは、PDFファイルのデフォルトの設定を削除し、代わりに示す中でそれらを開く(とorg-file-appsに含まれて他のすべてを保持)します。私はelispに慣れていないので、このソリューションが堅牢であるかどうかわかりませんが、それは私にとってはうまくいくもので、下のものよりもエレガントなようです。

;; PDFs visited in Org-mode are opened in Evince (and other file extensions are handled according to the defaults) 
(add-hook 'org-mode-hook 
     '(lambda() 
     (setq org-file-apps 
      '((auto-mode . emacs) 
      ("\\.mm\\'" . default) 
      ("\\.x?html?\\'" . default) 
      ("\\.pdf\\'" . "evince %s"))))) 
+0

良い解決策のようですね! – certainly

+0

@確かに私は解決策を編集しました。なぜなら、 'append'はorg-modeが呼び出されるたびにエントリを追加して変数をあふれさせたからです。おそらく、私は 'add-to-list'を使ってもっとエレガントなことをすることができます。 –

+0

@確かに私はよりエレガントかもしれない何かを加えました。 –

関連する問題