Вы можете загружать один и тот же файл несколько раз в сеансе Emacs. Например, после того как вы переписали и переустановили определение функции, отредактировав его в буфере, вы можете захотеть вернуться к исходной версии; вы можете сделать это, перезагрузив файл, из которого он был взят.
При загрузке или перезагрузке файлов имейте в виду, что функции load и load-library автоматически загружают байт-скомпилированный файл, а не нескомпилированный файл аналогичного имени. Если вы переписываете файл, который намереваетесь сохранить и переустановить, вам необходимо байт-скомпилировать новую версию; в противном случае Emacs загрузит более старый, байт-скомпилированный файл вместо вашей новой, нескомпилированной версии! Если это произойдет, сообщение, отображаемое при загрузке файла, будет содержать «(compiled; note, source is newer)», чтобы напомнить вам о необходимости его перекомпиляции.
При написании форм в файле библиотеки Lisp помните, что файл может быть загружен несколько раз. Например, подумайте, следует ли повторно инициализировать каждую переменную при перезагрузке библиотеки; defvar не меняет значение, если переменная уже инициализирована. (См. Определение глобальных переменных.)
Самый простой способ добавить элемент в alist выглядит так:
(push '(leif-mode " Leif") minor-mode-alist)
Но это добавит несколько элементов, если библиотека будет перезагружена. Чтобы избежать этой проблемы, используйте add-to-list (см. Изменение переменных списка):
(add-to-list 'minor-mode-alist '(leif-mode " Leif"))
Иногда вы захотите явно проверить, была ли библиотека уже загружена. Если библиотека использует provide для предоставления именованной функции, вы можете использовать featurep в начале файла, чтобы проверить, был ли выполнен вызов provide ранее (см. Функции). Альтернативно, вы можете использовать что-то вроде этого:
(defvar foo-was-loaded nil) (unless foo-was-loaded execute-first-time-only (setq foo-was-loaded t))