]> git.eshelyaron.com Git - emacs.git/commitdiff
Add rudimentary font-locking to edmacro-mode
authorStefan Kangas <stefan@marxist.se>
Sun, 19 Jun 2022 11:16:19 +0000 (13:16 +0200)
committerStefan Kangas <stefan@marxist.se>
Sun, 19 Jun 2022 12:32:13 +0000 (14:32 +0200)
* lisp/edmacro.el (edmacro-label): New face.
(edmacro-mode-font-lock-keywords): New variable.
(edit-kbd-macro): Use font-lock in 'edmacro-mode'.  Minor
improvement to command substitution.

lisp/edmacro.el

index 11afb68883d22b1491df485ad919ccb14c32527c..debd76c43ada7b0ed29f5851ec647edcee857df9 100644 (file)
@@ -76,6 +76,32 @@ Default nil means to write characters above \\177 in octal notation."
   "C-c C-c" #'edmacro-finish-edit
   "C-c C-q" #'edmacro-insert-key)
 
+(defface edmacro-label
+  '((default :inherit bold)
+    (((class color) (background dark)) :foreground "light blue")
+    (((min-colors 88) (class color) (background light)) :foreground "DarkBlue")
+    (((class color) (background light)) :foreground "blue")
+    (t :inherit bold))
+  "Face used for labels in `edit-kbd-macro'."
+  :version "29.1"
+  :group 'kmacro)
+
+(defvar edmacro-mode-font-lock-keywords
+  `((,(rx bol (group (or "Command" "Key" "Macro") ":")) 0 'edmacro-label)
+    (,(rx bol
+          (group ";; Keyboard Macro Editor.  Press ")
+          (group (*? any))
+          (group  " to finish; press "))
+     (1 'font-lock-comment-face)
+     (2 'help-key-binding)
+     (3 'font-lock-comment-face)
+     (,(rx (group (*? any))
+           (group " to cancel" (* any)))
+      nil nil
+      (1 'help-key-binding)
+      (2 'font-lock-comment-face)))
+    (,(rx (one-or-more ";") (zero-or-more any)) 0 'font-lock-comment-face)))
+
 (defvar edmacro-store-hook)
 (defvar edmacro-finish-hook)
 (defvar edmacro-original-buffer)
@@ -151,11 +177,18 @@ With a prefix argument, format the macro in a more concise way."
         (setq-local edmacro-original-buffer oldbuf)
         (setq-local edmacro-finish-hook finish-hook)
         (setq-local edmacro-store-hook store-hook)
+        (setq-local font-lock-defaults
+                    '(edmacro-mode-font-lock-keywords nil nil nil nil))
+        (setq font-lock-multiline nil)
        (erase-buffer)
         (insert (substitute-command-keys
                  (concat
+                  ;; When editing this, make sure to update
+                  ;; `edmacro-mode-font-lock-keywords' to match.
                   ";; Keyboard Macro Editor.  Press \\[edmacro-finish-edit] "
-                  "to finish; press \\`C-x k RET' to cancel.\n")))
+                  "to finish; press \\[kill-buffer] \\`RET' to cancel.\n")
+                 ;; Use 'no-face argument to not conflict with font-lock.
+                 'no-face))
        (insert ";; Original keys: " fmt "\n")
        (unless store-hook
          (insert "\nCommand: " (if cmd (symbol-name cmd) "none") "\n")