2009-04-15 8 views
14

Wenn insert-kbd-macro mit einem Namen Tastatur Makro speichern I "unleserlich" Lisp-Code wieEmacs: immer lesbar Tastatur-Makros

(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))) 

ich eher so etwas wie die folgenden haben würde erhalten:

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

IIRC Ich verwendete die gleiche Methode, um beide Tastaturmakros aufzuzeichnen, zu benennen und einzufügen: F3, F4, name-last-kbd-macro.

Ist es möglich, das erste Makro in einem lesbaren Format zu erhalten?

Antwort

13

Die Tastaturmakrofunktion in Emacs besteht aus zwei Modi: macros und kmacros. Ersteres gibt das Makro auf eine Weise zurück, die Sie mögen - die Symbolform - das letztere liefert die Lambda-Form. Wenn Sie also name-last-kbd-macro anrufen, erhalten Sie ein Symbolformular, wenn Sie kmacro-name-last-macro aufrufen, erhalten Sie eine Lambda-Form.

-3

Ich habe noch nie die erste Form gesehen. Die zweite Form ist, was ich gewohnt bin. Haben Sie versucht, das erste Makro neu aufzunehmen, um zu sehen, was passiert, wenn Sie sicher sind, dass Sie aufzeichnen, dann benennen und dann einfügen?

Die andere Sache zu versuchen ist "C-X (", die kmacro-Start-Makro und "C-X)" kmacro-End-Makro, anstatt F3/F4, die etwas über das Führen eines Zählers machen tun. Vielleicht wird der einfachere Tastaturmakrobefehl einfacher funktionieren.

1

Danke dafür!

So ist die Benennung des Makros bestimmt das Format, wenn Einfügen?

Ich habe einige weitere Experimente durchgeführt und festgestellt, dass M-x insert-kbd-macro RET RET mir die "Symbol-Form" geben würde.

Während M-x insert-kbd-macro RET pp2sql RET die "labmda-form" angibt (nach der Benennung mit name-last-kbd-macro).

Jetzt merke ich, dass ich den ganzen Weg name-last-kbd-macro in meinen früheren Experimenten verwendet habe ...?

+2

Wenn Sie die Funktionsdefinition von 'kmacro-name-last-macro' (' Ch f kmacro-name-last-macro') überprüfen, sehen Sie in der letzten Zeile 'kmacro-lambda-form' auf das Makro - deshalb bekommst du die Lambda-Form. (Nächstes Mal besser bearbeiten Sie Ihre Frage und dann eine neue Antwort.) –

Verwandte Themen