Emacs: получение читаемых клавиатурных макросов

При использовании insert-kbd-macro для сохранения именованного макроса клавиатуры я получаю "нечитаемый" Lisp код, например

(fset 'ppsql
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([134217788 134217765 44 return 44 17 10 return 33 134217765 102 102 backspace 114 111 109 return 17 10 102 111 109 backspace backspace 114 111 return 33] 0 "%d")) arg)))

Я бы предпочел бы что-то вроде следующего:

(fset 'move-line-down
      [?\C-a ?\C-k delete down ?\C-y return up])

IIRC Я использовал тот же метод для записи, имени и вставки обоих макросов клавиатуры: F3, F4, name-last-kbd-macro.

Можно ли получить первый макрос в читаемом формате?

Ответы

Ответ 1

Функциональность макроса клавиатуры в Emacs состоит из двух режимов: macros и kmacros. Первый возвращает макрос таким образом, который вам нравится - форма символа, вторая - лямбда-форма. Итак, если вы вызываете name-last-kbd-macro, вы получаете форму символа, если вы вызываете kmacro-name-last-macro, вы получаете форму лямбды.

Ответ 2

Спасибо за это!

Значит, имя макроса определяет формат при вставке?

Я провел еще несколько экспериментов и заметил, что M-x insert-kbd-macro RET RET даст мне "символическую форму".

В то время как M-x insert-kbd-macro RET pp2sql RET дает "labmda-form" (после именования name-last-kbd-macro).

Теперь я понимаю, что в моих предыдущих экспериментах я использовал name-last-kbd-macro...?

Ответ 3

Я никогда не видел первую форму. Вторая форма - это то, к чему я привык. Вы пытались перезаписать первый макрос, чтобы узнать, что произойдет, если вы уверены, что вы записываете, а затем называете, а затем вставляете?

Другое дело: "C-X (", который вызывает kmacro-start-macro и "C-X" ) "kmacro-end-macro", а не F3/F4, которые делают что-то постороннее в отношении ведения счетчика. Возможно, более простая команда макроса клавиатуры будет работать более прямо.