Subject: [PATCH] Eglot: don't use "nil" as minibuffer initial input
From: Eshel Yaron <[email-masked]>
To: [email-masked]
Date: Wed, 28 Dec 2022 14:22:17 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Tags: patch

Hello,

Currently, doing emacs -Q and followed by M-x eglot in the scratch
buffer results in a prompt for major mode to manage with LSP, but the
initial minibuffer input as well as the default value for the
completing-read call are both set to the string "nil", which is not very
helpful as that's not a valid input.

This patch tweaks the prompt a little and avoids this issue by leaving
the minibuffer's initial input empty and making sure we don't set the
default value to "nil" either.

Thanks,
Eshel

In GNU Emacs 30.0.50 (build 19, x86_64-apple-darwin22.1.0, NS
 appkit-2299.00 Version 13.0 (Build 22A380)) of 2022-12-26 built on
 esmac
Repository revision: cc29fab3a66c59e77d0ff67c0f3e2e34ec80a03c
Repository branch: master
Windowing system distributor 'Apple', version 10.3.2299
System Description:  macOS 13.0

Configured using:
 'configure --with-native-compilation --enable-link-time-optimization
 --with-json --with-xwidgets --with-mailutils --with-imagemagick
 --without-dbus'

From 66d17efabaca0f3d08b78529c8d64fc65dc799e2 Mon Sep 17 00:00:00 2001
From: Eshel Yaron <[email-masked]>
Date: Wed, 28 Dec 2022 13:59:53 +0200
Subject: [PATCH] Eglot: don't use "nil" as minibuffer initial input

Doing M-x eglot in a buffer for which buffer-file-name is nil, prompts
the user for a major mode to manage by invoking completing-read.  The
way completing-read was called would end up with the string "nil" as
the initial minibuffer input, which is not very useful nor is it a
valid input.

* lisp/progmodes/eglot.el (eglot--guess-contact): tweak prompt for
major mode.
---
 lisp/progmodes/eglot.el | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 15cb1b6fad..57f9be718f 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -991,6 +991,7 @@ eglot--guess-contact
 non-nil, maybe prompt user, else error as soon as something can't
 be guessed."
   (let* ((guessed-mode (if buffer-file-name major-mode))
+         (guessed-mode-name (and guessed-mode (symbol-name guessed-mode)))
          (main-mode
           (cond
            ((and interactive
@@ -998,9 +999,10 @@ eglot--guess-contact
                      (not guessed-mode)))
             (intern
              (completing-read
-              "[eglot] Start a server to manage buffers of what major mode? "
-              (mapcar #'symbol-name (eglot--all-major-modes)) nil t
-              (symbol-name guessed-mode) nil (symbol-name guessed-mode) nil)))
+              (format-prompt "Start LSP server for major mode"
+                             guessed-mode-name)
+              (mapcar #'symbol-name (eglot--all-major-modes))
+              nil t nil nil guessed-mode-name nil)))
            ((not guessed-mode)
             (eglot--error "Can't guess mode to manage for `%s'" (current-buffer)))
            (t guessed-mode)))
-- 
2.38.1