mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-06 04:09:37 +00:00
allow string values in cons for :bind keywords
It is possible with `bind-key` and `define-key` (and also `bind-chord` and `key-chord-define`) to define a binding to a string's value, i.e: ``` elisp (bind-key "C-;" "the ") (bind-chord "^^" "λ") ``` This adds an option for `(use-package-normalize-pairs)` that allows string values to be given with the `:bind` (and also `:chord`) keywords to expand into these definitions.
This commit is contained in:
parent
95038f96f1
commit
cd867dfe2f
1 changed files with 18 additions and 9 deletions
|
@ -644,8 +644,14 @@ manually updated package."
|
||||||
(and allow-vector (vectorp (car x))))
|
(and allow-vector (vectorp (car x))))
|
||||||
(symbolp (cdr x))))
|
(symbolp (cdr x))))
|
||||||
|
|
||||||
|
(defsubst use-package-is-string-pair (x)
|
||||||
|
"Return t if X has the type (STRING . STRING)."
|
||||||
|
(and (consp x)
|
||||||
|
(stringp (car x))
|
||||||
|
(stringp (cdr x))))
|
||||||
|
|
||||||
(defun use-package-normalize-pairs
|
(defun use-package-normalize-pairs
|
||||||
(name label arg &optional recursed allow-vector)
|
(name label arg &optional recursed allow-vector allow-string-cdrs)
|
||||||
"Normalize a list of string/symbol pairs."
|
"Normalize a list of string/symbol pairs."
|
||||||
(cond
|
(cond
|
||||||
((or (stringp arg) (and allow-vector (vectorp arg)))
|
((or (stringp arg) (and allow-vector (vectorp arg)))
|
||||||
|
@ -655,16 +661,18 @@ manually updated package."
|
||||||
((and (not recursed) (listp arg) (listp (cdr arg)))
|
((and (not recursed) (listp arg) (listp (cdr arg)))
|
||||||
(mapcar #'(lambda (x)
|
(mapcar #'(lambda (x)
|
||||||
(let ((ret (use-package-normalize-pairs
|
(let ((ret (use-package-normalize-pairs
|
||||||
name label x t allow-vector)))
|
name label x t allow-vector allow-string-cdrs)))
|
||||||
(if (listp ret)
|
(if (listp ret)
|
||||||
(car ret)
|
(car ret)
|
||||||
ret))) arg))
|
ret))) arg))
|
||||||
|
((and allow-string-cdrs (use-package-is-string-pair arg))
|
||||||
|
(list arg))
|
||||||
(t arg)))
|
(t arg)))
|
||||||
|
|
||||||
(defun use-package-normalize-binder (name keyword args)
|
(defun use-package-normalize-binder (name keyword args)
|
||||||
(use-package-as-one (symbol-name keyword) args
|
(use-package-as-one (symbol-name keyword) args
|
||||||
(lambda (label arg)
|
(lambda (label arg)
|
||||||
(use-package-normalize-pairs name label arg nil t))))
|
(use-package-normalize-pairs name label arg nil t t))))
|
||||||
|
|
||||||
(defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
|
(defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
|
||||||
(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
|
(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
|
||||||
|
@ -850,12 +858,13 @@ deferred until the prefix key sequence is pressed."
|
||||||
(apply
|
(apply
|
||||||
#'nconc
|
#'nconc
|
||||||
(mapcar #'(lambda (command)
|
(mapcar #'(lambda (command)
|
||||||
|
(when (not (stringp command))
|
||||||
(append
|
(append
|
||||||
`((unless (fboundp ',command)
|
`((unless (fboundp ',command)
|
||||||
(autoload #',command ,name-string nil t)))
|
(autoload #',command ,name-string nil t)))
|
||||||
(when (bound-and-true-p byte-compile-current-file)
|
(when (bound-and-true-p byte-compile-current-file)
|
||||||
`((eval-when-compile
|
`((eval-when-compile
|
||||||
(declare-function ,command ,name-string))))))
|
(declare-function ,command ,name-string)))))))
|
||||||
(delete-dups (plist-get state :commands))))
|
(delete-dups (plist-get state :commands))))
|
||||||
|
|
||||||
body)))
|
body)))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue