Другая возможная конструкция, которая могла бы работать для этого, будет использовать 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-файлы будут удалены, это ваше второе.Все остальные предполагают, что запись существует в той или иной форме.