summary refs log tree commit diff stats
path: root/lisp/+kmacro.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/+kmacro.el')
-rw-r--r--lisp/+kmacro.el70
1 files changed, 0 insertions, 70 deletions
diff --git a/lisp/+kmacro.el b/lisp/+kmacro.el deleted file mode 100644 index a3cde61..0000000 --- a/lisp/+kmacro.el +++ /dev/null
@@ -1,70 +0,0 @@
1;;; +kmacro.el -*- lexical-binding: t; -*-
2
3;;; Commentary:
4
5;; Many of these come from this Reddit thread:
6;; https://old.reddit.com/r/emacs/comments/rlli0u/whats_your_favorite_defadvice/
7
8;;; Code:
9
10(require 'kmacro)
11
12;; Indicate when a kmacro is being recorded in the mode-line
13
14(defface +kmacro-modeline nil
15 "Face when kmacro is active")
16
17(set-face-attribute '+kmacro-modeline nil
18 :background "Firebrick"
19 :box '(:line-width -1 :color "salmon"
20 :style released-button))
21
22(defun +kmacro-change-mode-line (&rest _)
23 "Remap the mode-line face when recording a kmacro."
24
25 (add-to-list 'face-remapping-alist '(mode-line . +kmacro-modeline)))
26
27(defun +kmacro-restore-mode-line (&rest _)
28 "Restore the mode-line face after kmacro is done recording."
29 (setf face-remapping-alist
30 (assoc-delete-all 'mode-line face-remapping-alist)))
31
32(define-minor-mode +kmacro-recording-indicator-mode
33 "Change the mode-line's face when recording a kmacro."
34 :lighter ""
35 :global t
36 (if +kmacro-recording-indicator-mode
37 (progn
38 (advice-add #'kmacro-start-macro :before #'+kmacro-change-mode-line)
39 (advice-add #'kmacro-keyboard-quit :after #'+kmacro-restore-mode-line)
40 (advice-add #'kmacro-end-macro :after #'+kmacro-restore-mode-line))
41 (+kmacro-restore-mode-line)
42 (advice-remove #'kmacro-start-macro #'+kmacro-change-mode-line)
43 (advice-remove #'kmacro-keyboard-quit #'+kmacro-restore-mode-line)
44 (advice-remove #'kmacro-end-macro #'+kmacro-restore-mode-line)))
45
46;; Undo keyboard macros in a single bound (like vi!)
47
48(defun +kmacro-block-undo (fn &rest args)
49 (let ((marker (prepare-change-group)))
50 (unwind-protect (apply fn args)
51 (undo-amalgamate-change-group marker))))
52
53(define-minor-mode +kmacro-block-undo-mode
54 "Undo kmacros all at once (like vi)."
55 :global t
56 :lighter " KUndo"
57 (if +kmacro-block-undo-mode
58 (dolist (fn '(kmacro-call-macro
59 kmacro-exec-ring-item
60 dot-mode-execute
61 apply-macro-to-region-lines))
62 (advice-add fn :around #'+kmacro-block-undo))
63 (dolist (fn '(kmacro-call-macro
64 kmacro-exec-ring-item
65 dot-mode-execute
66 apply-macro-to-region-lines))
67 (advice-remove fn #'+kmacro-block-undo))))
68
69(provide '+kmacro)
70;;; +kmacro.el ends here