Ответ 1
Как сказал Трей, используйте elisp от Emacs для изучения. Обычно я делаю одну из двух вещей:
1) Если я пытаюсь выяснить, как использовать определенную функцию, я открою окно dired
и сделаю следующее:
% g foobar
где foobar
- это имя функции, которая мне интересна в обучении использованию. Это отметит все файлы, которые используют foobar
, а затем я иду и просматриваю их, чтобы увидеть, как его вызвать, в каком контексте он называется и т.д.
2) Если я пытаюсь понять, как что-то сделать, и я знаю режим, который делает что-то похожее, я пойду посмотрю на исходный код этого режима, чтобы посмотреть, как они это делают. Если вы не знаете, с чего начать, но вы знаете, как выполнить то, что вы хотите сделать, удобная вещь - посмотреть на нее с помощью привязки ключей. Например, в буфере dired
выполните следующие действия:
C-h k % g
и это вызовет:
% g runs the command dired-mark-files-containing-regexp, which is an
% interactive compiled Lisp function in `dired.el'.
It is bound to % g, <menu-bar> <regexp> <mark-cont>.
(dired-mark-files-containing-regexp regexp &optional marker-char)
Mark all files with contents containing regexp for use in later
commands. A prefix argument means to unmark them instead.
`.' and `..' are never marked.
Нажав dired.el
в приведенном выше тексте (в буфере emacs), вы откроете исходный код и вернетесь к определению этой функции. Это отличный способ узнать на примере.
Не забывайте, что отладчик elisp - это способ увидеть, что происходит, и следовать за ним, когда код выполняется шаг за шагом. Вы можете пометить код для отладки с помощью edebug-defun
, а затем вызвать его как обычно, после чего emacs проведет вас через код.