From: Dmitry Gutov Date: Thu, 19 Oct 2023 22:24:56 +0000 (+0300) Subject: Improve behavior with project-switch-use-entire-map=t X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e170869712295a97815044a89fa4157450f1674d;p=emacs.git 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. --- diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 4a47b4e94a1..0d6539113cc 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -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