Я хочу увидеть определение существующей функции в Emacs. Это возможно?
Я пытался C-h d function-name RET
, но он возвращает только строку документации для функции, а не саму функцию.
Я думаю о чем-то похожем на type
команду bash , которая вернет полное определение функции.
(Смущающая предыстория: я случайно переписал рабочую функцию в своем .emacs
файле с нерабочей версией. Оригинальная функция все еще находится в памяти! И она работает! Но я не могу на всю жизнь вспомнить, как я это сделал.)
.emacs
открытым в буфере, попробуйте отменить, как сумасшедший.Ответы:
Если вы введете текст
C-h f function-name RET
, вы получите документацию по функции, со ссылкой на источник функции, если он доступен.Я не думаю, что есть простая функция Lisp, которую вы можете вызвать, чтобы получить местоположение источника функции; поиск довольно тесно связан с остальной частью справочной системы.
find-lisp-object-file-name
является основной функцией, которая пытается выяснить, где находится источник функции.Если
function-name
это не примитив (определенный в C-источнике Emacs), вы можете увидеть его код с помощью(symbol-function 'function-name)
или, в более общем смысле (косвенная функция 'имя-функции). Однако, если функция была скомпилирована, все, что вы увидите, это ее байт-код.источник
(symbol-function 'function-name)
это именно то, что я искал! Кроме того, похоже, что если вам действительно нужен источник функций C, вы можете получить его, используя информацию из ответа Олега.M-x find-function
возвращает определение функции рядом с точкой.Из документации:
Если вы хотите включить также функции, реализованные в C, вы должны добавить следующее в ваш файл .emacs:
источник