Есть ли способ напечатать определение существующей функции в 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"))
Другие вопросы по тегам