viewers lxde pdf emacs org-mode

lxde - ¿Cómo hago que Org-mode abra archivos PDF en Evince?



pdf viewers linux (3)

Puede usar una construcción similar a https://stackoverflow.com/a/3985552/789593 pero adaptarla a archivos PDF y Evince. Lo que quiere hacer es alterar la lista org-file-apps . Esto se puede hacer agregando lo siguiente a su .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"))))

Esto eliminará la configuración predeterminada para los archivos PDF y, en su lugar, los abrirá en Evince (y conservará todo lo demás incluido en org-file-apps ). Soy nuevo en elisp, así que no sé si esta solución es sólida, pero funciona para mí y parece ser más elegante que la de abajo.

Otra opción, que parece más fea, es buscar los valores predeterminados y configurarlos, pero cambiar el valor de los archivos 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")))))

En Org-mode cuando trato de abrir un enlace a un archivo PDF, no pasa nada. Además, cuando hago Cc Ce d para exportar como LaTeX y procesar en PDF y abrir, el PDF se genera pero no se abre. ¿Cómo hago que Org-mode abra archivos PDF en Evince?

Estoy usando Org-mode 7.6 en GNU Emacs 23.3.1 y Evince 3.2.1 en Ubuntu 11.10.


Otra posible construcción que podría funcionar para esto sería usar eval-after-load lugar de add-hook . Solo establecerá los valores una vez al inicio, no tendrá que preocuparse por las entradas que se agreguen o no (a menos que vuelva a cargar regularmente org).

Combine eso con setcdr y puede evitar tener que eliminar de la lista y luego volver a agregar, agregar if y se asegurará de que agrega o cambia el valor. El if solo es necesario para los valores que no están en la lista de forma predeterminada, solo para asegurarse de que no termine con conflictos en algún punto de la línea.

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

Editar para aclarar

eval-after-load solo evalúa el bloque cuando se invoca (require ''org) . Si org ya está cargado, se evaluará inmediatamente (creí erróneamente que se ejecutaba cada vez que se cargaba una biblioteca, pero parece ser solo la primera vez). La diferencia entre add-hook y eval-after-load se explica here .

Dado que org-file-apps es una defcustom , no cambiará los valores si los configura antes de que se cargue org, si construye la lista desde cero (incluidos los valores predeterminados como en su segunda solución (más fea)) simplemente podría setq en tu init.el y todo funcionaría. También significa que no sobrescribirá tus cambios.

Agregar (if (assoc que en la entrada de PDF no dañará nada, simplemente se asegurará de que si se eliminan archivos PDF de las org-file-apps predeterminadas que aún se agregarán). La única solución que no fallaría si se tratara de archivos PDF eliminado es el segundo. Todos los demás asumen que la entrada existe de una forma u otra.


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

Si org usa los valores predeterminados de su sistema, debe editar su archivo ./mailcap.

Intenta agregar esta línea:

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