В течение дня я постоянно использую C-h f
или C-h v
( describe-function
и describe-variable
) для поиска документации по функциям и переменным. Чаще всего, если я не получаю всю необходимую информацию, я нажимаю на ссылку файла в конце:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
и перейдите к исходному коду. Это работает для установленных пакетов, но, похоже, не работает для встроенных. Например, в верхней части страницы справки для команды describe-function
все, что я получаю, это:
describe-function is an interactive compiled Lisp function.
без ссылки на исходный код. Есть ли способ быстро перейти к исходному коду встроенного пакета?
Я знаю, что могу найти исходный код, например, /usr/share/emacs/24.5/lisp
и найти множество способов быстрого доступа к этому каталогу, но мне любопытно, есть ли быстрый и простой способ перехода к встроенной функции / определению переменной в исходный код. Спасибо!
источник
M-x find-function
;M-x find-variable
;M-x find-face
;M-x find-library
, Я всегда использую полную установку Emacs, чтобы у меня был доступ ко всему, и сразу после сборки своего собственного Emacs я копирую исходный код C и устанавливаю его местоположение, чтобы я мог также найти определения кода C-Source. Смотрите переменную,find-function-C-source-directory
чтобы установить местоположение исходного кода на C после того, как вы скопируете его.M-x describe-function
: description-function - это интерактивная автоматически загружаемая скомпилированная функция Lisp в 'help-fns.el'. И оттуда я могу нажать (или нажать Enter)help-fns.el
и затем перенести в соответствующий раздел кода. Возможно, у вас есть несколько версий Emacs, а в той, которую вы используете в данный момент, не установлен весь исходный код?emacs -Q
(без файла инициализации) или если вы можете воспроизвести его с помощью рецепта, начинающегося сemacs -Q
(например, с указанием, какие библиотеки вы загружаете, как вы их загружаете и т. Д.), Тогда, пожалуйста, рассмотрите возможность сообщения об ошибке Докладываю:M-x report-emacs-bug
..el
файлы (считаются необязательными) от.elc
файлов (обязательных), так что вам нужно установить один или несколько дополнительных пакетов для их получения. Если вы получили Emacs от менеджера пакетов вашей ОС, возможно, это объясняет это./usr/bin/emacs
и/usr/bin/emacsclient
, и у меня есть версия красиво упакованная в приложении OSX папки заканчивается в .app - то есть,/Applications/Emacs.app
(внутри что Emacs.app, являются бинарными файлами и все файлы исходного кода).Ответы:
Причина, по которой вы иногда видите «интерактивно скомпилированную функцию Lisp» (или аналогично для переменных) без имени файла, заключается в том, что функция была загружена из скомпилированного байта файла, а соответствующий исходный файл Elisp отсутствует. Чтобы показать вам исходный код, Emacs должен быть в состоянии найти исходный код.
Многие дистрибутивы поставляют исходные файлы Lisp в отдельном пакете, потому что не каждый пользователь хочет их, и они громоздки. Например, на Debian и производные, установите
emacs24-el
. Если вы строите Emacs из исходного кода,make install
копируйте исходные коды Elisp.Если вы хотите увидеть исходный код примитивов (подпрограммы и специальные формы), Emacs должен быть в состоянии найти источники Си. Они обычно не доступны, если вы не установили из источника.
Emacs ищет источники Lisp в каталогах в
load-path
. Для функции или переменной, загруженной изfoo.elc,
файла, может бытьfoo.el
илиfoo.el.gz
. Emacs ищет исходники Csource-directory
и запрашивает другой каталог, если не находит исходный файл.источник
M-x emacs-version
в конце она говорит «изменено Debian», что будет означать, что я использую версию из диспетчера пакетов моей ОС (Ubuntu), верно?/usr/bin/emacs
или/usr/local/bin/emacs
?Если вы ищете способы быстрого перехода к исходному коду, есть также
find-function-at-point
и такие,find-variable-at-point
которые будут переходить к определению символа под курсором - вы можете, например, связать их с Ch Cf и Ch Cv.Или вы можете попробовать elisp-slime-nav , который использует M-. перейти к определению символа и M-, чтобы вернуться - он перемещается к переменным, функциям, библиотекам и лицам - https://github.com/purcell/elisp-slime-nav/
источник