Spec-Zone.ru › Elisp

Поиск библиотек

При загрузке библиотеки Lisp в Emacs, он ищет её в списке каталогов, заданных переменной load-path.

Переменная: load-path

Значение этой переменной представляет собой список каталогов, которые Emacs просматривает при загрузке файлов с помощью load. Каждый элемент — это строка (которая должна быть каталогом) или nil (обозначающая текущий рабочий каталог).

При запуске Emacs он устанавливает значение load-path в несколько этапов. Сначала он инициализирует load-path с помощью значений по умолчанию, заданных при компиляции Emacs. Обычно это каталог, похожий на

"/usr/local/share/emacs/version/lisp"

(В этих и последующих примерах замените /usr/local на префикс установки вашего Emacs.) Эти каталоги содержат стандартные файлы Lisp, которые поставляются с Emacs. Если Emacs не может их найти, он не запустится корректно.

Если вы запускаете Emacs из каталога, где он был скомпилирован — то есть, исполняемый файл, который не был формально установлен — Emacs вместо этого инициализирует load-path используя каталог lisp в каталоге, содержащем исходные файлы, из которых он был скомпилирован. Если вы компилировали Emacs в отдельном каталоге от исходных файлов, он также добавляет каталоги lisp из каталога сборки. (Во всех случаях элементы представлены абсолютными именами файлов.)

Если вы не запускаете Emacs с опцией --no-site-lisp, он затем добавляет ещё два каталога site-lisp в начало load-path. Они предназначены для локально установленных файлов Lisp и обычно имеют вид:

"/usr/local/share/emacs/version/site-lisp"

и

"/usr/local/share/emacs/site-lisp"

Первый — для локально установленных файлов для определённой версии Emacs; второй — для локально установленных файлов, предназначенных для использования со всеми установленными версиями Emacs. (Если Emacs запускается без установки, он также добавляет каталоги site-lisp из каталогов исходных файлов и сборки, если они существуют. Обычно эти каталоги не содержат каталоги site-lisp.)

Если переменная окружения EMACSLOADPATH установлена, она изменяет процедуру инициализации. Emacs инициализирует load-path на основе значения переменной окружения.

Синтаксис EMACSLOADPATH такой же, как и для PATH; каталоги разделяются символом «:» (или «;» на некоторых операционных системах). Вот пример того, как установить переменную EMACSLOADPATH (из оболочки типа sh):

export EMACSLOADPATH=/home/foo/.emacs.d/lisp:

Пустой элемент в значении переменной окружения, будь то конечный (как в приведённом примере), начальный или вложенный, заменяется значением по умолчанию load-path, определённым стандартной процедурой инициализации. Если таких пустых элементов нет, то EMACSLOADPATH определяет весь load-path. Вы должны включить либо пустой элемент, либо явный путь к каталогу, содержащему стандартные файлы Lisp, иначе Emacs не будет работать. (Ещё один способ изменить load-path — использовать опцию командной строки -L при запуске Emacs; см. ниже.)

Для каждого каталога в load-path, Emacs проверяет, содержит ли он файл subdirs.el, и если да, загружает его. Файл subdirs.el создаётся при сборке/установке Emacs и содержит код, который заставляет Emacs добавлять все подкаталоги этих каталогов в load-path. Добавляются как непосредственные подкаталоги, так и подкаталоги на нескольких уровнях вглубь. Но он исключает подкаталоги, имена которых не начинаются с буквы или цифры, и подкаталоги с именами RCS или CVS, а также подкаталоги, содержащие файл с именем .nosearch.

Далее, Emacs добавляет все дополнительные каталоги загрузки, которые вы указываете с помощью опции командной строки -L (см. Аргументы действий в Руководстве пользователя GNU Emacs). Он также добавляет каталоги, где установлены дополнительные пакеты, если таковые имеются (см. Основные принципы упаковки).

Часто в файл инициализации (см. Файл инициализации) добавляется код для добавления одного или нескольких каталогов в load-path. Например:

(push "~/.emacs.d/lisp" load-path)

Дублирование Emacs использует специальное значение load-path. Если вы используете файл site-load.el или site-init.el для настройки дублируемого Emacs (см. Сборка Emacs), любые изменения в load-path внесённые этими файлами, будут потеряны после дублирования.

Команда: locate-library library &optional nosuffix path interactive-call

Эта команда находит точное имя файла для библиотеки library. Она ищет библиотеку таким же образом, как и load, а аргумент nosuffix имеет то же значение, что и в load: не добавлять суффиксы «.elc» или «.el» к указанному имени library.

Если path не пуст, используется этот список каталогов вместо load-path.

Когда locate-library вызывается из программы, она возвращает имя файла в виде строки. Когда пользователь выполняет locate-library интерактивно, аргумент interactive-call равен t, и это говорит locate-library отобразить имя файла в области эха.

Команда: list-load-path-shadows &optional stringp

Эта команда отображает список затенённых файлов Emacs Lisp. Затенённый файл — это файл, который обычно не загружается, несмотря на то, что он находится в каталоге в load-path, из-за наличия другого файла с аналогичным именем в каталоге, расположенном ранее в load-path.

Например, предположим, что load-path установлено как

  ("/opt/emacs/site-lisp" "/usr/share/emacs/23.3/lisp")

и что оба этих каталога содержат файл с именем foo.el. Тогда (require 'foo) никогда не загрузит файл во втором каталоге. Такая ситуация может указывать на проблему в процессе установки Emacs.

При вызове из Lisp эта функция выводит сообщение со списком затенённых файлов вместо отображения их в буфере. Если необязательный аргумент stringp не пустой, она вместо этого возвращает затенённые файлы в виде строки.

Если Emacs был скомпилирован с поддержкой нативного компилирования (см. Нативное компилирование), то при обнаружении файла «.elc» с байт-компилированным кодом при поиске в load-path, Emacs попытается найти соответствующий файл «.eln», содержащий соответствующий нативно-скомпилированный код. Нативно-скомпилированные файлы ищутся в каталогах, указанных в native-comp-eln-load-path.

Переменная: native-comp-eln-load-path

Эта переменная содержит список каталогов, где Emacs ищет нативно-скомпилированные файлы «.eln». Имена файлов в списке, которые не являются абсолютными, интерпретируются как относительные к invocation-directory (см. Система среды). Последний каталог в списке — системный каталог, то есть каталог с файлами «.eln», установленные процессом сборки и установки Emacs. В каждом из каталогов в списке Emacs ищет файлы «.eln» в подкаталоге, имя которого составлено из версии Emacs и 8-символьного хэша, зависящего от текущего ABI нативного компилирования; имя этого подкаталога хранится в переменной comp-native-version-dir.

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/Library-Search.html

Spec-Zone.ru

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