В каком файле определён тот или иной символ
- Функция: symbol-file symbol &optional type native-p
-
Эта функция возвращает имя файла, в котором был определён symbol. Если type —
nil, допускается определение любого типа. Если type —defun,defvarилиdefface, это указывает только на определение функции, переменной или лица соответственно.Обычно это значение представляет собой абсолютное имя файла. Оно также может быть равно
nil, если определение не связано ни с одним файлом. Если symbol указывает на автоматически загружаемую функцию, значением может быть относительное имя файла без расширения.Если необязательный третий аргумент native-p не равен
nilи Emacs был собран с поддержкой нативной компиляции (см. Компиляция Lisp в машинный код), эта функция попытается найти файл .eln, в котором был определён symbol, вместо файла .elc или .el. Если такой файл .eln найден и не является устаревшим, функция вернёт его абсолютное имя; в противном случае она сообщит имя исходного файла или файла с байт-кодом.
Основой для symbol-file служат данные в переменной load-history.
- Переменная: load-history
-
Значение этой переменной — ассоциативный список, связывающий имена загруженных библиотечных файлов с именами определённых ими функций и переменных, а также предоставленных или требуемых ими возможностей.
Каждый элемент этого ассоциативного списка описывает одну загруженную библиотеку (включая библиотеки, предварительно загружаемые при запуске). Это список, у которого CAR — абсолютное имя файла библиотеки (строка). Остальные элементы списка имеют следующий вид:
varСимвол var был определён как переменная.
(defun . fun)Функция fun была определена.
(defun . fun), обозначающий определение fun как функции.(defface . face)Лицо face было определено.
(require . feature)Возможность feature была запрошена.
(provide . feature)Возможность feature была предоставлена.
(cl-defmethod method specializers)Именованный метод method был определён с помощью
cl-defmethod, где specializers служат его специализаторами.(define-type . type)Тип type был определён.
Значение
load-historyможет содержать элемент, у которого CAR равенnil. Этот элемент описывает определения, созданные с помощьюeval-bufferв буфере, не связанном с файлом.
Команда eval-region обновляет load-history, но делает это, добавляя определённые символы к элементу посещаемого файла, а не заменяя этот элемент. См. Вычисление.
Помимо load-history, каждая функция хранит собственную историю в свойстве символа function-history. Функциям уделяется особое внимание, поскольку часто они определяются в два этапа в двух разных файлах (обычно один из них содержит автозагрузку), поэтому, чтобы правильно выгрузить файл, нам нужно точнее знать, как этот файл повлиял на определение функции.
Свойство символа function-history содержит список вида (file1 def2 file2 def3 ...), где file1 — последний файл, изменивший определение, а def2 — определение, существовавшее до file1 и заданное file2, и так далее. Логически этот список должен заканчиваться именем первого файла, определившего эту функцию, но для экономии места последний элемент обычно опускается.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Where-Defined.html