それはだ、私はマクロの定義を開始するのを忘れたかのように
そのためにkmacro-edit-lossage
(C-x C-k l
)を使用できます。これにより、最後の300回のキーストローク(単純な挿入を含む)を表示し、マクロとして編集できます。
簡単な使い方としては、繰り返す挿入の先頭を見つけて、「マクロ:」からそのポイントまでのすべてのテキストを削除し、を押すだけC-c C-c
です。これで、最初にマクロを記録することを忘れなかったかのように、同じアクションを実行するために使用できるマクロができました。
悲しいことに、最後の300キーストロークにマウスクリックが含まれている場合、これは失敗します。
編集:次のコードは、最後のマウスイベントの後のキーのみが保持されるように変更します。
(defadvice recent-keys (after tv/recent-keys-no-mouse first ())
"Return only the keys since the last mouse event"
(let* ((vec ad-return-value)
(lst (append vec nil))
(nmax (length vec))
(i (- nmax 1)))
(while
(and
(>= i 0)
(not
(let ((mod (event-modifiers (elt vec i))))
(or (memq 'click mod)
(memq 'double mod)
(memq 'triple mod)
(memq 'drag mod)
(memq 'down mod)))))
(setq i (- i 1)))
(setq ad-return-value (vconcat (nthcdr (+ i 1) lst) nil))))
(defun tv/kmacro-edit-lossage-no-mouse ()
"Same as `kmacro-edit-lossage', but fallback if the keys contain mouse events.
Source: http://emacs.stackexchange.com/a/4071/184"
(interactive)
(ad-activate-regexp "tv/recent-keys-no-mouse")
(call-interactively #'kmacro-edit-lossage)
(ad-deactivate-regexp "tv/recent-keys-no-mouse"))
;; If you want this function to replace the default one, uncomment this line:
; (global-set-key (kbd "C-x C-k l") 'tv/kmacro-edit-lossage-no-mouse)