mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Support hints in the :repeat keyword of defvar-keymap for repeat-mode
* lisp/keymap.el (defvar-keymap): Add :hints to the :repeat keyword. Put the property 'repeat-hint' on the command symbol. * lisp/repeat.el (repeat-echo-message-string): Show hint strings defined with the property 'repeat-hint' on the command symbol (bug#70576).
This commit is contained in:
parent
a1613505e2
commit
0023891e84
3 changed files with 36 additions and 18 deletions
4
etc/NEWS
4
etc/NEWS
|
|
@ -2619,6 +2619,10 @@ major mode.
|
|||
** The variable 'rx-constituents' is now obsolete.
|
||||
Use 'rx-define', 'rx-let' and 'rx-let-eval' instead.
|
||||
|
||||
---
|
||||
** 'defvar-keymap' can specify hints for 'repeat-mode'.
|
||||
Using ':repeat (:hints ((command . "hint") ...))' will show
|
||||
the hint string in the echo area together with repeatable keys.
|
||||
|
||||
|
||||
* Changes in Emacs 30.1 on Non-Free Operating Systems
|
||||
|
|
|
|||
|
|
@ -603,10 +603,11 @@ non-nil, all commands in the map will have the `repeat-map'
|
|||
symbol property.
|
||||
|
||||
More control is available over which commands are repeatable; the
|
||||
value can also be a property list with properties `:enter' and
|
||||
`:exit', for example:
|
||||
value can also be a property list with properties `:enter',
|
||||
`:exit' and `:hints', for example:
|
||||
|
||||
:repeat (:enter (commands ...) :exit (commands ...))
|
||||
:repeat (:enter (commands ...) :exit (commands ...)
|
||||
:hints ((command . \"hint\") ...))
|
||||
|
||||
`:enter' specifies the list of additional commands that only
|
||||
enter `repeat-mode'. When the list is empty, then only the
|
||||
|
|
@ -621,6 +622,10 @@ Specifying a list of commands is useful when those commands exist
|
|||
in this specific map, but should not have the `repeat-map' symbol
|
||||
property.
|
||||
|
||||
`:hints' is a list of cons pairs where car is a command and
|
||||
cdr is a string that is displayed alongside of the repeatable key
|
||||
in the echo area.
|
||||
|
||||
\(fn VARIABLE-NAME &key DOC FULL PARENT SUPPRESS NAME PREFIX KEYMAP REPEAT &rest [KEY DEFINITION]...)"
|
||||
(declare (indent 1))
|
||||
(let ((opts nil)
|
||||
|
|
@ -660,7 +665,9 @@ property.
|
|||
(setq def (pop defs))
|
||||
(when (and (memq (car def) '(function quote))
|
||||
(not (memq (cadr def) (plist-get repeat :exit))))
|
||||
(push `(put ,def 'repeat-map ',variable-name) props)))))
|
||||
(push `(put ,def 'repeat-map ',variable-name) props)))
|
||||
(dolist (def (plist-get repeat :hints))
|
||||
(push `(put ',(car def) 'repeat-hint ',(cdr def)) props))))
|
||||
|
||||
(let ((defvar-form
|
||||
`(defvar ,variable-name
|
||||
|
|
|
|||
|
|
@ -553,20 +553,27 @@ This function can be used to force exit of repetition while it's active."
|
|||
(defun repeat-echo-message-string (keymap)
|
||||
"Return a string with the list of repeating keys in KEYMAP."
|
||||
(let (keys)
|
||||
(map-keymap (lambda (key cmd) (and cmd (push key keys))) keymap)
|
||||
(format-message "Repeat with %s%s"
|
||||
(mapconcat (lambda (key)
|
||||
(substitute-command-keys
|
||||
(format "\\`%s'"
|
||||
(key-description (vector key)))))
|
||||
keys ", ")
|
||||
(if repeat-exit-key
|
||||
(substitute-command-keys
|
||||
(format ", or exit with \\`%s'"
|
||||
(if (key-valid-p repeat-exit-key)
|
||||
repeat-exit-key
|
||||
(key-description repeat-exit-key))))
|
||||
""))))
|
||||
(map-keymap (lambda (key cmd) (and cmd (push (cons key cmd) keys)))
|
||||
keymap)
|
||||
(format-message
|
||||
"Repeat with %s%s"
|
||||
(mapconcat (lambda (key-cmd)
|
||||
(let* ((key (car key-cmd))
|
||||
(cmd (cdr key-cmd))
|
||||
(hint (when (symbolp cmd)
|
||||
(get cmd 'repeat-hint))))
|
||||
(substitute-command-keys
|
||||
(format "\\`%s'%s"
|
||||
(key-description (vector key))
|
||||
(if hint (format ":%s" hint) "")))))
|
||||
keys ", ")
|
||||
(if repeat-exit-key
|
||||
(substitute-command-keys
|
||||
(format ", or exit with \\`%s'"
|
||||
(if (key-valid-p repeat-exit-key)
|
||||
repeat-exit-key
|
||||
(key-description repeat-exit-key))))
|
||||
""))))
|
||||
|
||||
(defun repeat-echo-message (keymap)
|
||||
"Display in the echo area the repeating keys defined by KEYMAP.
|
||||
|
|
|
|||
Loading…
Reference in a new issue