Subject: bug#76235: [PATCH] Improve prompt for 'project-switch-project'

From: Ship Mints <[email-masked]>
Date: Wed, 12 Feb 2025 15:13:56 -0500

Sounds good. I'll update the patch now maybe with "Command in" or "Command
for" after I see how it looks on the screen.

Dealing with text stability in the little one-line minibuffer prompt is
indeed a challenge. Perhaps we can propertize the prefix to be bold or the
menu option list to be bolded so that at least it stands out?

On Wed, Feb 12, 2025 at 3:10 PM Dmitry Gutov <[email-masked]> wrote:

> Hi!
>
> On 12/02/2025 19:57, Ship Mints wrote:
> > Improved prompt for 'project-switch-project' now displays the chosen
> > project on which to invoke a command. The prompt now reads "Command for
> > project "xxx": " vs "Choose: " which never read well to me.
>
> Thanks for the suggestion - I see the problem it aims to address.
>
> One minor problem is that the "menu" becomes less stable horizontally,
> moving right or left depending on the directory name's length.
>
> Not sure if an ideal solution is possible, but here's a tweak with a
> shorter prompt. WDYT?
>
> diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
> index ff707437e95..e6280cd0883 100644
> --- a/lisp/progmodes/project.el
> +++ b/lisp/progmodes/project.el
> @@ -2211,7 +2211,7 @@ project--menu-prompt
>      project-switch-commands
>      "  "))
>
> -(defun project--switch-project-command ()
> +(defun project--switch-project-command (&optional dir)
>     (let* ((commands-menu
>             (mapcar
>              (lambda (row)
> @@ -2241,7 +2241,11 @@ project--switch-project-command
>                                          (propertize "Unrecognized input"
>                                                      'face 'warning)
>                                          (help-key-description choice
> nil)))))
> -        (setq choice (read-key-sequence (concat "Choose: " prompt)))
> +        (setq choice (read-key-sequence (concat
> +                                         (if dir
> +                                             (format-message "Command
> in `%s': " dir)
> +                                           "Command: ")
> +                                         prompt)))
>           (when (setq command (lookup-key commands-map choice))
>             (when (numberp command) (setq command nil))
>             (unless (or project-switch-use-entire-map
> @@ -2266,7 +2270,7 @@ project-switch-project
>     (project--remember-dir dir)
>     (let ((command (if (symbolp project-switch-commands)
>                        project-switch-commands
> -                   (project--switch-project-command)))
> +                   (project--switch-project-command dir)))
>           (buffer (current-buffer)))
>       (unwind-protect
>           (progn
>
>
> Or "Call in ...: ", or "Invoke in ...: ", or just "In ...: ".
>