Subject: 30.0.50; `find-function' can find wrong function due to implicit completion while exiting minibuffer
From: Jens Schmidt <[email-masked]>
To: [email-masked]
Date: Fri, 4 Aug 2023 21:46:12 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Start from emacs -Q

M-x find-function RET shell-mode RET

Pops you to sh-mode.  Or

M-x find-function RET vc-create-repo RET

Pops to vc-git-create-repo.

Which can be confusing.

Maybe completion in `find-function-read' should be done like this:

diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index bf890fc35a9..d393ccc759a 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -591,7 +591,7 @@ find-function-read
      (list (intern (completing-read
                     (format-prompt "Find %s" symb prompt-type)
                     obarray predicate
-                   t nil nil (and symb (symbol-name symb)))))))
+                   'lambda nil nil (and symb (symbol-name symb)))))))

  (defun find-function-do-it (symbol type switch-fn)
    "Find Emacs Lisp SYMBOL in a buffer and display it.

Ripped the symbol `lambda' from the completion of `load-file', not sure
whether there is any better symbol.

Present in Emacs 29 as well.