Emacs: получение читабельных макросов клавиатуры - PullRequest
14 голосов
/ 16 апреля 2009

При использовании 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.

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

Ответы [ 3 ]

13 голосов
/ 16 апреля 2009

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

1 голос
/ 17 апреля 2009

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

Таким образом, имя макроса определяет формат при вставке ?

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

Принимая во внимание, что M-x insert-kbd-macro RET pp2sql RET дает «labmda-форму» (после присвоения имени name-last-kbd-macro).

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

0 голосов
/ 16 апреля 2009

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

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

...