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, которые делают что-то постороннее в отношении ведения счетчика. Возможно, более простая команда макроса клавиатуры будет работать более прямо.