]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/repeat.el (describe-repeat): New command (bug#49265).
authorJuri Linkov <juri@linkov.net>
Tue, 29 Jun 2021 20:36:16 +0000 (23:36 +0300)
committerJuri Linkov <juri@linkov.net>
Tue, 29 Jun 2021 20:36:16 +0000 (23:36 +0300)
lisp/repeat.el

index 46c880d0dde4c544db03b0a840ef58da80997391..503cb340006dbbb55aa084a9911aac632dea8ce7 100644 (file)
@@ -397,7 +397,7 @@ When Repeat mode is enabled, and the command symbol has the property named
                                    (and (commandp s)
                                         (get s 'repeat-map)
                                         (push (get s 'repeat-map) keymaps))))))
-      (message "Repeat mode is enabled for %d commands and %d keymaps"
+      (message "Repeat mode is enabled for %d commands and %d keymaps; see `describe-repeat'."
                (length commands)
                (length (delete-dups keymaps))))))
 
@@ -489,6 +489,28 @@ When Repeat mode is enabled, and the command symbol has the property named
                                             repeat-echo-mode-line-string)))
     (force-mode-line-update t)))
 
+(defun describe-repeat ()
+  "Describe repeatable commands and keymaps."
+  (interactive)
+  (help-setup-xref (list #'describe-repeat)
+                   (called-interactively-p 'interactive))
+  (let ((keymaps nil))
+    (all-completions
+     "" obarray (lambda (s)
+                  (and (commandp s)
+                       (get s 'repeat-map)
+                       (push s (alist-get (get s 'repeat-map) keymaps)))))
+    (with-help-window (help-buffer)
+      (with-current-buffer standard-output
+        (princ "This is a list of repeatable keymaps and commands.\n\n")
+
+        (dolist (keymap (sort keymaps (lambda (a b) (string-lessp (car a) (car b)))))
+          (princ (format-message "`%s' keymap is repeatable by these commands:\n"
+                                 (car keymap)))
+          (dolist (command (sort (cdr keymap) 'string-lessp))
+            (princ (format-message " `%s'\n" command)))
+          (princ "\n"))))))
+
 (provide 'repeat)
 
 ;;; repeat.el ends here