Commit e1708697 authored by Dmitry Gutov's avatar Dmitry Gutov
Browse files

Improve behavior with project-switch-use-entire-map=t

* lisp/progmodes/project.el (project--keymap-prompt): New function.
(project--switch-project-command): Use it when
project-switch-use-entire-map is non-nil.  Also check that CHOICE
is not a number (bug#63648).  And print incorrect inputs too.
parent 4ace48f3
Pipeline #26825 failed with stages
in 2 minutes and 42 seconds
......@@ -1941,6 +1941,15 @@ Otherwise, use the face `help-key-binding' in the prompt."
:version "30.1")
(defun project--keymap-prompt ()
"Return a prompt for the project switching using the prefix map."
(let (keys)
(map-keymap
(lambda (evt _)
(when (characterp evt) (push evt keys)))
project-prefix-map)
(mapconcat (lambda (key) (help-key-description (string key) nil)) keys " ")))
(defun project--menu-prompt ()
"Return a prompt for the project switching dispatch menu."
(mapconcat
(pcase-lambda (`(,cmd ,label ,key))
......@@ -1979,11 +1988,22 @@ Otherwise, use the face `help-key-binding' in the prompt."
(when-let ((cmd (nth 0 row))
(keychar (nth 2 row)))
(define-key temp-map (vector keychar) cmd)))))
command)
command
choice)
(while (not command)
(let* ((overriding-local-map commands-map)
(choice (read-key-sequence (project--keymap-prompt))))
(prompt (if project-switch-use-entire-map
(project--keymap-prompt)
(project--menu-prompt))))
(when choice
(setq prompt (concat prompt
(format " %s: %s"
(propertize "Unrecognized input"
'face 'warning)
(help-key-description choice nil)))))
(setq choice (read-key-sequence (concat "Choose: " prompt)))
(when (setq command (lookup-key commands-map choice))
(when (numberp command) (setq command nil))
(unless (or project-switch-use-entire-map
(assq command commands-menu))
;; TODO: Add some hint to the prompt, like "key not
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment