Повторная загрузка
Вы можете загрузить заданный файл более одного раза в сессии Emacs. Например, после переписывания и повторной установки определения функции, отредактировав её в буфере, вы можете вернуться к исходной версии; это можно сделать, перезагрузив файл, откуда она взята.
Когда вы загружаете или перезагружаете файлы, имейте в виду, что функции load и load-library автоматически загружают байткодированный файл, а не нескомпилированный файл с аналогичным именем. Если вы переписываете файл, который намерены сохранить и повторно установить, вам необходимо байткодировать новую версию; в противном случае Emacs загрузит более старую байткодированную версию вместо вашей новой, нескомпилированной версии! Если это произойдёт, в сообщении, отображаемом при загрузке файла, будет указано «(скомпилировано; обратите внимание, исходный код новее)», чтобы напомнить вам о необходимости его повторной компиляции.
При написании форм в файле библиотеки Lisp помните, что файл может быть загружен более одного раза. Например, подумайте о том, нужно ли повторно инициализировать каждую переменную при перезагрузке библиотеки; defvar не изменяет значение, если переменная уже инициализирована. (См. Определение переменных.)
Самый простой способ добавить элемент в список пар — это:
(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))
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Repeated-Loading.html