Ответ 1
Нет, извините. Существует нет тривиального способа преобразования макроса emacs в elisp.
Обновление: В Emacs появилась некоторая работа, чтобы начать этот путь. См. этот поток в качестве отправной точки. Это все еще невозможно (июнь 2010 г.), но есть активность.
Первая причина, по которой я могу думать, - это иметь дело с интерактивными командами и переводить нажатия клавиш в правильные аргументы для функций.
Подумайте о следующей последовательности:
C-x b .em TAB RET
Это начинает команду переключиться на буфер, набирает три символа, использует завершение TAB для его завершения и RET для принятия. Эквивалент lisp для конечного результата (в сеансе emacs, где завершение TAB уникально):
(switch-to-buffer ".emacs")
Размышляя о завершении, есть также взаимодействия с расширением всех типов (dabbrev
, hippie-expand
и т.д.).
Отправной точкой может быть M-x edit-last-kbd-macro, которая (в моем случае) показывает это:
;; Keyboard Macro Editor. Press C-c C-c to finish; press C-x k RET to cancel.
;; Original keys: C-x b .em <tab> RET
Command: last-kbd-macro
Key: none
Macro:
C-x b ;; switch-to-buffer
.em ;; self-insert-command * 3
<tab> ;; pabbrev-expand-maybe
RET ;; newline-and-indent
Это, по крайней мере, дает вам некоторые имена функций. Но вы увидите, что RET помечен как 'newline-and-indent
, что неверно, потому что во время выполнения макроса минибуфер активен, а привязка фактически 'minibuffer-complete-and-exit
. Аналогично, правильное связывание для TAB составляет 'minibuffer-complete
.