8

Я хочу увидеть определение существующей функции в Emacs. Это возможно?

Я пробовал C-h d function-name RET , но он возвращает только строку документации для функции, а не саму функцию.

Я думаю о чем-то похожем на команду type bash, которая вернет полное определение функции.

(Неловкая предыстория: я случайно переписал рабочую функцию в своем файле .emacs с нерабочей версией. Оригинальная функция все еще в памяти! И это работает! Но я не могу на всю жизнь вспомнить, как я это сделал.)

2 ответа2

9

Если вы наберете C-h f function-name RET , вы получите документацию по функции со ссылкой на источник функции, если она доступна.

Я не думаю, что есть простая функция Lisp, которую вы можете вызвать, чтобы получить местоположение источника функции; поиск довольно тесно связан с остальной частью справочной системы. find-lisp-object-file-name - это основная функция, которая пытается выяснить, где находится источник функции.

Если function-name является примитивом (определенным в источнике C в Emacs), вы можете увидеть его код с помощью (symbol-function 'function-name) или, в более общем смысле (косвенная функция-имя-функции). Однако, если функция была скомпилирована, все, что вы увидите, это ее байт-код.

3

M-x find-function возвращает определение функции вблизи точки.

Из документации:

Находит в буфере исходный файл, содержащий определение функции вблизи точки (выбранной с помощью функции function-named-at-point), и помещает точку перед определением. Установите метку перед перемещением, если буфер уже существует.

Если вы хотите включить также функции, реализованные в C, вы должны добавить следующее в ваш файл .emacs:

(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .