From 35710234cefabd10ac9bc1d3b166b5ec91b43b44 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Fri, 29 Mar 2013 22:53:27 +0800 Subject: [PATCH] * kmacro.el (kmacro-to-register): New command. (kmacro-execute-from-register): New function. (kmacro-keymap): Bind to 'x'. Fixes: debbugs:14071 --- lisp/ChangeLog | 6 ++++++ lisp/kmacro.el | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 36b69c1ac2..6bb92573d0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-03-29 Leo Liu + + * kmacro.el (kmacro-to-register): New command. + (kmacro-execute-from-register): New function. + (kmacro-keymap): Bind to 'x'. (Bug#14071) + 2013-03-29 Stefan Monnier * mpc.el: Use defvar-local and setq-local. diff --git a/lisp/kmacro.el b/lisp/kmacro.el index d573bd0239..4253fb87d5 100644 --- a/lisp/kmacro.el +++ b/lisp/kmacro.el @@ -202,6 +202,7 @@ macro to be executed before appending to it." ;; naming and binding (define-key map "b" 'kmacro-bind-to-key) (define-key map "n" 'kmacro-name-last-macro) + (define-key map "x" 'kmacro-to-register) map) "Keymap for keyboard macro commands.") (defalias 'kmacro-keymap kmacro-keymap) @@ -836,6 +837,26 @@ Such a \"function\" cannot be called from Lisp, but it is a valid editor command (put symbol 'kmacro t)) +(defun kmacro-execute-from-register (k) + (let ((last-kbd-macro k)) + (kmacro-call-macro current-prefix-arg))) + +(defun kmacro-to-register (r) + "Store the last keyboard macro in register R." + (interactive + (progn + (or last-kbd-macro (error "No keyboard macro defined")) + (list (read-char "Save to register: ")))) + (set-register r (registerv-make + last-kbd-macro + :jump-func 'kmacro-execute-from-register + :print-func (lambda (k) + (princ (format "a keyboard macro:\n %s" + (format-kbd-macro k)))) + :insert-func (lambda (k) + (insert (format-kbd-macro k)))))) + + (defun kmacro-view-macro (&optional _arg) "Display the last keyboard macro. If repeated, it shows previous elements in the macro ring." -- 2.20.1