summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Gjorgjevski <dario.gjorgjevski+git@gmail.com>2021-04-06 16:51:28 +0200
committerDmitry Gutov <dgutov@yandex.ru>2021-04-07 03:24:49 +0300
commit5d293f4f7489bcc9659f69f41e8db2a0755e5f44 (patch)
tree1407ae3c8954598b837e9da573f095383210ef4c
parentc105017c44d4a679f7af739b2c0390b2c7850569 (diff)
downloademacs-5d293f4f7489bcc9659f69f41e8db2a0755e5f44.tar.gz
emacs-5d293f4f7489bcc9659f69f41e8db2a0755e5f44.tar.bz2
emacs-5d293f4f7489bcc9659f69f41e8db2a0755e5f44.zip
Allow complex key bindings in project-switch-project
* lisp/progmodes/project.el (project-switch-project): Replace read-event with an overriding local map and read-key-sequence to allow for complex key bindings to be read (bug#47620).
-rw-r--r--lisp/progmodes/project.el36
1 files changed, 20 insertions, 16 deletions
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 910f70db03c..84d02e25d93 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1338,23 +1338,27 @@ made from `project-switch-commands'.
When called in a program, it will use the project corresponding
to directory DIR."
(interactive (list (project-prompt-project-dir)))
- (let ((commands-menu
- (mapcar
- (lambda (row)
- (if (characterp (car row))
- ;; Deprecated format.
- ;; XXX: Add a warning about it?
- (reverse row)
- row))
- project-switch-commands))
- command)
+ (let* ((commands-menu
+ (mapcar
+ (lambda (row)
+ (if (characterp (car row))
+ ;; Deprecated format.
+ ;; XXX: Add a warning about it?
+ (reverse row)
+ row))
+ project-switch-commands))
+ (commands-map
+ (let ((temp-map (make-sparse-keymap)))
+ (set-keymap-parent temp-map project-prefix-map)
+ (dolist (row commands-menu temp-map)
+ (when-let ((cmd (nth 0 row))
+ (keychar (nth 2 row)))
+ (define-key temp-map (vector keychar) cmd)))))
+ command)
(while (not command)
- (let ((choice (read-event (project--keymap-prompt))))
- (when (setq command
- (or (car
- (seq-find (lambda (row) (equal choice (nth 2 row)))
- commands-menu))
- (lookup-key project-prefix-map (vector choice))))
+ (let ((overriding-local-map commands-map)
+ (choice (read-key-sequence (project--keymap-prompt))))
+ (when (setq command (lookup-key commands-map choice))
(unless (or project-switch-use-entire-map
(assq command commands-menu))
;; TODO: Add some hint to the prompt, like "key not