Есть ли способ напечатать определение существующей функции в Emacs?
Я хочу увидеть определение существующей функции в Emacs. Это возможно?
я пробовал C-h d function-name RET
, но он возвращает только строку документации для функции, а не саму функцию.
Я думаю, что-то похожее на Баш type
команда, которая будет возвращать полное определение функции.
(Смущающая предыстория: я случайно написал над рабочей функцией в моем .emacs
файл с нерабочей версией. Оригинальная функция все еще в памяти! И это работает! Но я не могу на всю жизнь вспомнить, как я это сделал.)
2 ответа
Если вы печатаете C-h f function-name RET
вы получите документацию по функции, со ссылкой на источник функции, если таковой имеется.
Я не думаю, что есть простая функция Lisp, которую вы можете вызвать, чтобы получить местоположение источника функции; поиск довольно тесно связан с остальной частью справочной системы. find-lisp-object-file-name
является основной функцией, которая пытается выяснить, где находится источник функции.
Если не function-name
является примитивом (определенным в C-источнике Emacs), вы можете увидеть его код (symbol-function 'function-name)
или в более общем смысле (косвенная функция 'имя-функции). Однако, если функция была скомпилирована, все, что вы увидите, это ее байт-код.
M-x find-function
возвращает определение функции вблизи точки.
Из документации:
Находит в буфере исходный файл, содержащий определение функции вблизи точки (выбранной функцией function-named-at-point), и помещает точку перед определением. Установите метку перед перемещением, если буфер уже существует.
Если вы хотите включить также функции, реализованные в C, вы должны добавить следующее в ваш файл.emacs:
(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))