Otra posible construcción que podrían funcionar para esto sería use eval-after-load
en 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).
Combina eso con setcdr
y puedes evitar tener que eliminar de la lista y luego volver a agregar, agrega if
y te asegurarás de agregar o cambiar 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 una aclaración
eval-after-load
sólo evalúa el bloque cuando (require 'org)
se llama. 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.
Desde org-file-apps
es una defcustom
no va a cambiar los valores si los presentaron se carga org, si se construye la lista desde cero (incluyendo valores por defecto como en su segunda solución (feo)) que podría simplemente setq
en tu init.el y todo funcionaría. También significa que no sobrescribirá tus cambios.
Agregando (if (assoc
a la entrada PDF no hará daño, simplemente se asegurará de que si se eliminan archivos PDF de la predeterminada org-file-apps
que todavía se agregará. La única solución que no fallaría si se eliminaran archivos PDF es la segunda.Todos los demás asumen que la entrada existe de una forma u otra.
A veces cargo org-mode para almacenamientos intermedios varias veces en una sesión. ¿Eso afecta esta solución? ¿O es solo si uso 'org-reload'? Además, ¿podría agregar una estructura '(if (assoc) para pdfs para que sea una prueba futura? –
@NN agregó algunos detalles en una edición que debería responder esa pregunta. –
Gracias por su elaboración. Esta solución es la más elegante hasta ahora . –