Ответ 1
Другой возможной конструкцией, которая могла бы работать для этого, было бы использовать eval-after-load
, а не add-hook
. Он будет устанавливать значения только один раз при запуске, вам не придется беспокоиться о добавленных или нет добавленных записях (если вы не регулярно перезагружаете 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-hook
и eval-after-load
объясняется здесь.
Так как org-file-apps
является defcustom
, он не изменит значения, если вы установите их перед загрузкой org, если вы создадите список с нуля (включая значения по умолчанию, как в вашем втором (более уродливом) решении), вы можете просто setq
в вашем init.el, и все будет работать. Это также означает, что он не перезапишет ваши изменения.
Добавление (if (assoc
в запись PDF ничего не повредит, это просто гарантирует, что если PDF файлы когда-либо удаляются из стандартного org-file-apps
, который он будет добавлен. Единственное решение, которое не подведет, если PDF файлы будут удалены, является вашим вторым. Остальные все предполагают, что запись существует в той или иной форме.