2009-04-15 45 views
14

當使用insert-kbd-macro保存名爲鍵盤宏我得到「無法讀取」 Lisp的喜歡Emacs的:越來越可讀鍵盤宏

(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我用同樣的方法來記錄,命名和插入兩個鍵盤宏:F3F4name-last-kbd-macro

是否有可能以可讀格式獲取第一個宏?

回答

13

Emacs中的鍵盤宏功能分爲兩種模式:macroskmacros。前者以您喜歡的方式返回宏 - 符號形式 - 後者提供lambda表單。所以,如果你打電話給name-last-kbd-macro,你會得到一個符號表格,如果你打電話給kmacro-name-last-macro,你會得到一個lambda表格。

-3

我從來沒見過第一種形式。第二種形式是我習慣的。您是否嘗試重新錄製第一個宏,以查看如果確定您錄製了,然後命名,然後插入會發生什麼?

另一件要嘗試的是「C-X(」,它調用kmacro-start-macro和「C-X)」kmacro-end-macro,而不是F3/F4,它們在做一些與保持計數器無關的事情。也許簡單的鍵盤宏指令可以更直接地工作。

1

謝謝!

那麼命名爲的宏決定了當插入時的格式

我已經進行了一些更多的實驗,並注意到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 ......?

+2

當你檢查`kmacro-name-last-macro`(`Ch f kmacro-name-last-macro`)的函數定義時,你會在最後一行看到它調用`kmacro-lambda-form`在宏上 - 這就是爲什麼你得到lambda表單。 (下次更好地編輯您的問題,然後發佈一個新的答案。) – 2009-04-21 08:41:39