mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
keymap.el: Ease up support for non-kbd
formats.
While we want to standardize on the `kbd` syntax for user-facing code, the internal vector representation of key sequences is not going away, so let's not impose silly `key-description + key-parse` roundtrips. Also, provide some support for packages stuck with user configs defined to hold old-style key formats. * lisp/keymap.el (keymap-set): Allow vectors as `key`. (key-parse-old-format): New function, which stands out better than `key-description` when searching for uses of the old syntax. * list/outline.el (outline-minor-mode): Use it.
This commit is contained in:
parent
4839b42a16
commit
570a11052b
@ -39,7 +39,8 @@
|
||||
|
||||
(defun keymap-set (keymap key definition)
|
||||
"Set KEY to DEFINITION in KEYMAP.
|
||||
KEY is a string that satisfies `key-valid-p'.
|
||||
KEY is a string that satisfies `key-valid-p' (or a vector using the
|
||||
internal representation of key sequences).
|
||||
|
||||
DEFINITION is anything that can be a key's definition:
|
||||
nil (means key is undefined in this keymap),
|
||||
@ -57,13 +58,13 @@ DEFINITION is anything that can be a key's definition:
|
||||
or an extended menu item definition.
|
||||
(See info node `(elisp)Extended Menu Items'.)"
|
||||
(declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
|
||||
(keymap--check key)
|
||||
(unless (vectorp key) (keymap--check key))
|
||||
;; If we're binding this key to another key, then parse that other
|
||||
;; key, too.
|
||||
(when (stringp definition)
|
||||
(keymap--check definition)
|
||||
(setq definition (key-parse definition)))
|
||||
(define-key keymap (key-parse key) definition))
|
||||
(define-key keymap (if (vectorp key) key (key-parse key)) definition))
|
||||
|
||||
(defun keymap-global-set (key command)
|
||||
"Give KEY a global binding as COMMAND.
|
||||
@ -283,6 +284,18 @@ See `kbd' for a descripion of KEYS."
|
||||
(setq res (vconcat res key))))))
|
||||
res)))
|
||||
|
||||
(defun key-parse-old-format (keys)
|
||||
"Convert old-style string representation of KEYS to a vector.
|
||||
Simpler alternative to the Rube-Goldbergesque composition of
|
||||
`key-description' and `key-parse'."
|
||||
(cond
|
||||
((vectorp keys) keys)
|
||||
((multibyte-string-p keys) (vconcat keys))
|
||||
((stringp keys)
|
||||
(vconcat (mapcar (lambda (c) (if (> c 127) (logior (- c 128) ?\M-\0) c))
|
||||
keys)))
|
||||
(t (error "Invalid old-style key sequence: %S" keys))))
|
||||
|
||||
(defun key-valid-p (keys)
|
||||
"Say whether KEYS is a valid key.
|
||||
A key is a string consisting of one or more key strokes.
|
||||
|
@ -496,7 +496,8 @@ See the command `outline-mode' for more information on this mode."
|
||||
"<right-margin> <mouse-1>" 'outline-cycle
|
||||
"<left-margin> S-<mouse-1>" 'outline-cycle-buffer
|
||||
"<right-margin> S-<mouse-1>" 'outline-cycle-buffer
|
||||
(key-description outline-minor-mode-prefix) outline-mode-prefix-map)
|
||||
(key-parse-old-format outline-minor-mode-prefix)
|
||||
outline-mode-prefix-map)
|
||||
(if outline-minor-mode
|
||||
(progn
|
||||
(cond
|
||||
|
Loading…
Reference in New Issue
Block a user