Pertanyaan Bagaimana cara membuat file PDF terbuka Org-mode di Evince?


Dalam Org-mode ketika saya mencoba membuka tautan ke file PDF tidak terjadi apa-apa. Juga, ketika saya melakukannya C-c C-e d untuk mengekspor sebagai LaTeX dan memproses ke PDF dan membuka PDF yang dihasilkan tetapi tidak dibuka. Bagaimana cara membuat file PDF terbuka Org-mode di Evince?

Saya menggunakan Org-mode 7.6 di GNU Emacs 23.3.1 dan Evince 3.2.1 di Ubuntu 11.10.


29
2018-01-12 11:51


asal


Jawaban:


Konstruksi lain yang mungkin bisa berfungsi adalah menggunakannya eval-after-load daripada add-hook. Ini hanya akan mengatur nilai satu kali saat startup, Anda tidak perlu khawatir tentang entri yang ditambahkan atau tidak (kecuali Anda secara teratur memuat ulang org).

Gabungkan dengan setcdr dan Anda dapat menghindari menghapus dari daftar dan kemudian menambahkan kembali, menambahkan if dan Anda akan memastikan bahwa Anda menambahkan atau mengubah nilainya. Jika hanya diperlukan untuk nilai-nilai yang tidak ada dalam daftar secara default, hanya untuk memastikan Anda tidak berakhir dengan konflik di suatu tempat di telepon.

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

Edit untuk klarifikasi

eval-after-load hanya mengevaluasi blok kapan (require 'org) disebut. Jika org sudah dimuat maka akan segera dievaluasi (saya keliru mengira itu berjalan setiap kali sebuah perpustakaan dimuat, tetapi tampaknya hanya untuk pertama kalinya). Perbedaan antara add-hook dan eval-after-load dijelaskan sini.

Sejak org-file-apps adalah defcustom itu tidak akan mengubah nilai jika Anda mengaturnya sebelum org dimuat, jika Anda membangun daftar dari awal (termasuk nilai default seperti pada solusi kedua (lebih jelek)), Anda dapat dengan mudah setq di init.el Anda dan semuanya akan berfungsi. Ini juga berarti itu tidak akan menimpa perubahan Anda.

Menambah (if (assoc ke entri PDF tidak akan merugikan apa pun, itu hanya akan memastikan bahwa jika PDF pernah dihapus dari default org-file-apps bahwa itu masih akan ditambahkan. Satu-satunya solusi yang tidak akan gagal jika PDF dihapus adalah yang kedua. Yang lain semua menganggap entri itu ada dalam satu bentuk atau lainnya.


10
2018-02-02 16:32



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

Jika org menggunakan default sistem Anda, Anda harus mengedit file ./mailcap Anda.

Coba tambahkan baris ini:

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

21
2018-01-12 12:04



Anda dapat menggunakan konstruksi serupa https://stackoverflow.com/a/3985552/789593 tetapi menyesuaikannya dengan file PDF dan Evince. Apa yang ingin Anda lakukan adalah mengubah daftar org-file-apps. Ini dapat dilakukan dengan menambahkan hal berikut ke .emacs Anda:

;; 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"))))

Ini akan menghapus pengaturan default untuk file PDF dan membuka mereka di Evince (dan menyimpan yang lainnya termasuk di dalamnya org-file-apps). Saya baru ke elisp sehingga saya tidak tahu apakah solusi ini kuat, tetapi bekerja untuk saya dan tampaknya lebih elegan daripada yang di bawah ini.

Pilihan lain, yang tampak lebih buruk, adalah dengan mencari nilai default dan mengatur semuanya tetapi mengubah nilai untuk file PDF:

;; 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")))))

8
2018-01-12 13:46