diff options
author | Hugo Heagren <hugo@heagren.com> | 2022-01-17 15:41:35 +0000 |
---|---|---|
committer | Hugo Heagren <hugo@heagren.com> | 2022-01-28 22:37:37 +0000 |
commit | 5ef327ce9fc1397cdbbde8936eca37ae6383d787 (patch) | |
tree | da97916967981cb594990ec69ad0d8f7ccc7ba81 /lisp/use-package | |
parent | 2203246454fddd41e0a62e78b17befce561998b9 (diff) | |
download | emacs-5ef327ce9fc1397cdbbde8936eca37ae6383d787.tar.gz emacs-5ef327ce9fc1397cdbbde8936eca37ae6383d787.tar.bz2 emacs-5ef327ce9fc1397cdbbde8936eca37ae6383d787.zip |
bind-key-form: allow :exit keyword inside repeat map
Keys bound inside the scope of :exit are bound inside the repeat map,
but do not have their repeat-map property set (so they run a function,
but 'exit' the map).
Diffstat (limited to 'lisp/use-package')
-rw-r--r-- | lisp/use-package/bind-key.el | 18 | ||||
-rw-r--r-- | lisp/use-package/use-package-bind-key.el | 2 |
2 files changed, 17 insertions, 3 deletions
diff --git a/lisp/use-package/bind-key.el b/lisp/use-package/bind-key.el index bb09a6935a8..a899aca0ffc 100644 --- a/lisp/use-package/bind-key.el +++ b/lisp/use-package/bind-key.el @@ -263,6 +263,9 @@ Accepts keyword arguments: 'repeat-map property of each command bound (within the scope of the :repeat-map keyword) is set to this map. +:exit BINDINGS - Within the scope of :repeat-map will bind the + key in the repeat map, but will not set the + 'repeat-map property of the bound command. :filter FORM - optional form to determine when bindings apply The rest of the arguments are conses of keybinding string and a @@ -273,12 +276,14 @@ function symbol (unquoted)." prefix repeat-map repeat-doc + repeat-type ;; Only used internally filter menu-name pkg) ;; Process any initial keyword arguments - (let ((cont t)) + (let ((cont t) + (arg-change-func 'cddr)) (while (and cont args) (if (cond ((and (eq :map (car args)) (not prefix-map)) @@ -296,6 +301,9 @@ function symbol (unquoted)." override-global-map)))) (setq repeat-map (cadr args)) (setq map repeat-map)) + ((eq :exit (car args)) + (setq repeat-type :exit + arg-change-func 'cdr)) ((eq :prefix (car args)) (setq prefix (cadr args))) ((eq :filter (car args)) @@ -304,7 +312,7 @@ function symbol (unquoted)." (setq menu-name (cadr args))) ((eq :package (car args)) (setq pkg (cadr args)))) - (setq args (cddr args)) + (setq args (funcall arg-change-func args)) (setq cont nil)))) (when (or (and prefix-map (not prefix)) @@ -362,7 +370,8 @@ function symbol (unquoted)." ;; Only needed in this branch, since when ;; repeat-map is non-nil, map is always ;; non-nil - `(,@(when repeat-map `((put ,fun 'repeat-map ',repeat-map))) + `(,@(when (and repeat-map (not (eq repeat-type :exit))) + `((put ,fun 'repeat-map ',repeat-map))) (bind-key ,(car form) ,fun ,map ,filter)) `((bind-key ,(car form) ,fun nil ,filter)))))) first)) @@ -389,6 +398,9 @@ Accepts keyword arguments: 'repeat-map property of each command bound (within the scope of the :repeat-map keyword) is set to this map. +:exit BINDINGS - Within the scope of :repeat-map will bind the + key in the repeat map, but will not set the + 'repeat-map property of the bound command. :filter FORM - optional form to determine when bindings apply The rest of the arguments are conses of keybinding string and a diff --git a/lisp/use-package/use-package-bind-key.el b/lisp/use-package/use-package-bind-key.el index d056d4266cc..73ea8ca83e0 100644 --- a/lisp/use-package/use-package-bind-key.el +++ b/lisp/use-package/use-package-bind-key.el @@ -91,11 +91,13 @@ deferred until the prefix key sequence is pressed." ;; :filter SEXP ;; :menu-name STRING ;; :package SYMBOL + ;; :exit used within :repeat-map ((or (and (eq x :map) (symbolp (cadr arg))) (and (eq x :prefix) (stringp (cadr arg))) (and (eq x :prefix-map) (symbolp (cadr arg))) (and (eq x :prefix-docstring) (stringp (cadr arg))) (and (eq x :repeat-map) (symbolp (cadr arg))) + (eq x :exit) (and (eq x :repeat-docstring) (stringp (cadr arg))) (eq x :filter) (and (eq x :menu-name) (stringp (cadr arg))) |