Чи є спосіб надрукувати визначення існуючої функції в Emacs?


10

Я хочу побачити визначення існуючої функції в Emacs. Чи можливо це?

Я намагався C-h d function-name RET, але він повертає лише рядок документації для функції, а не саму фактичну функцію.

Я думаю про щось подібне до typeкоманди bash , яке поверне все визначення функції.

(Збентежуюча історія: Я випадково написав робочу функцію у своєму .emacsфайлі з непрацюючою версією. Оригінальна функція все ще зберігається в пам'яті! І вона працює! Але я не можу на все життя пам'ятати, як я це робила.)


1
Якщо ви .emacsвідкрили в буфері, спробуйте скасувати, як божевільний.
Жил "ТАК - перестань бути злим"

Відповіді:


10

Якщо ви введете текст C-h f function-name RET, ви отримаєте документацію функції із посиланням на джерело функції, якщо це можливо.

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

Якщо function-nameце не примітив (визначений у джерелі С Emacs), ви можете побачити його код із (symbol-function 'function-name), або в загальному випадку (ім'я функції непрямої функції). Однак якщо ця функція була байтована, все, що ви побачите, - це її байт-код.


1
Дякую! (symbol-function 'function-name)саме те, що я шукав! Крім того, схоже, якщо джерело вам справді потрібне для функцій C, ви можете отримати його, використовуючи інформацію з відповіді Олега.
Micah R Ledbetter

Дякую! Крім того, якщо функція завантажена автоматично, вам потрібно її зателефонувати один раз, перш ніж ви зможете отримати вихідний код.
Герхард Бургер

3

M-x find-function повертає визначення функції поблизу точки.

З документації:

Знаходить вихідний файл, що містить визначення функції поблизу точки (обраної функцією `call-at-point ') в буфері і ставить крапку перед визначенням. Встановіть позначку перед переміщенням, якщо буфер вже існував.

Якщо ви хочете включити також функції, реалізовані в C, ви повинні додати наступне у файл .emacs:

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

Хм. Це добре знати, але я думаю, що він працює лише для вбудованих функцій, а це не те, що я шукав.
Micah R Ledbetter

1
Він працює і для визначених користувачем функцій
Олег Павлів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.