2009-11-11 6 views
18

emacsマクロをelispに変換する方法はありますか?M-x insert-kbd-macroとは異なり、実際の動作はelisp文になります。EmacsマクロをElispに変換する

ありがとうございました。

答えて

22

いいえ、申し訳ありません。 emacsマクロをelispに変換するための些細な方法はありません。

更新:このパスを開始するには、Emacsにいくつかの作業があります。開始点としてthis threadを参照してください。それはまだできません(2010年6月)が、活動があります。

私が考えることができる最初の理由は、対話的なコマンドを扱い、キーストロークを関数の適切な引数に変換することです。次のシーケンスの

思う:

CxのB .EM TABのRET

これは、バッファに切り替えるには、コマンドを開始しますタイプ3つの文字、受け入れるようにTABのそれを完了するために完了し、RETを使用しています。 (TAB補完が一意であるEmacsセッションで)最終的な結果の等価Lispがある:完了の

(switch-to-buffer ".emacs") 

思考、すべてのタイプ(dabbrevhippie-expand、等)の膨張との相互作用もあります。

出発点は、することができM-X編集最後-KBD-マクロ(私の場合)は、これを示しています。少なくとも、あなたの関数名の一部を与える

;; Keyboard Macro Editor. Press C-c C-c to finish; press C-x k RET to cancel. 
;; Original keys: C-x b .em <tab> RET 

Command: last-kbd-macro 
Key: none 

Macro: 

C-x b  ;; switch-to-buffer 
.em   ;; self-insert-command * 3 
<tab>  ;; pabbrev-expand-maybe 
RET   ;; newline-and-indent 

。しかし、RET'newline-and-indentとラベル付けされていますが、これはマクロ実行時にミニバッファがアクティブで、バインディングが実際に'minibuffer-complete-and-exitであるため不正確です。同様に、TABの適切な結合は'minibuffer-completeです。

+0

Treyさん、ありがとうございます。興味深いですね。 – Sahas

4

私は、まさにこのhttps://github.com/Silex/elmacro

でそれはいくつかの癖を持っていますが、それはかなりうまく機能...たとえば、次のマクロはかなりのことができますパッケージを作っ:

F3 C-e M-b M-u C-a C-n F4 

は以下のelispを生成します:

(defun upcase-last-word() 
    "Change me!" 
    (interactive) 
    (move-end-of-line 1) 
    (backward-word 1) 
    (upcase-word 1) 
    (move-beginning-of-line 1) 
    (next-line 1 1)) 
関連する問題