MacroKey

Here’s a DedicatedKeys approach to keyboard macros. Bind some key to ted-macro-dwim; this is the key that you use to start recording, to stop recording, and also to execute. You might want to bind some other key to ted-macro-clear if you do this. I’m currently using F8 and M-F8 for these. Perhaps C-F8 or S-F8 could be bound to name-last-kbd-macro.

 (defun ted-macro-dwim (arg)
   "DWIM keyboard macro recording and executing."
   (interactive "P")
   (if defining-kbd-macro
       (if arg
           (end-kbd-macro arg)
         (end-kbd-macro))
     (if last-kbd-macro
         (call-last-kbd-macro arg)
       (start-kbd-macro arg))))
 (defun ted-macro-clear ()
   "Clear out the last keyboard macro."
   (interactive)
   (setq last-kbd-macro nil)
   (message "Last keyboard macro cleared."))

This is not actually quite ideal of what I’d call “dwim”. Better to use one key to start/end a macro and another dedicated key that always execute the last macro.

 (defun start-or-end-macro (arg)
  (interactive "P")
  (if defining-kbd-macro
      (if arg
          (end-kbd-macro arg)
          (end-kbd-macro))
      (start-kbd-macro arg)))
 (global-set-key '[f2] 'call-last-kbd-macro) 
 (global-set-key '[(control f2)] 'start-or-end-macro)

CategoryKeys