Spec-Zone.ru › Elisp

Повторная загрузка

Вы можете загрузить заданный файл более одного раза в сессии 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API