unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Daniel Koning <dk@danielkoning.com>,
	Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 41781@debbugs.gnu.org
Subject: bug#41781: 27.0.91; [PATCH] Eldoc describes the wrong function when reading an expression from the minibuffer
Date: Sat, 20 Jun 2020 10:49:14 +0300	[thread overview]
Message-ID: <83h7v6w51h.fsf@gnu.org> (raw)
In-Reply-To: <m2d067aasx.fsf@danielkoning.com> (message from Daniel Koning on Tue, 09 Jun 2020 21:56:14 -0500)

Stefan, any comments?

> From: Daniel Koning <dk@danielkoning.com>
> Date: Tue, 09 Jun 2020 21:56:14 -0500
> 
> The Eldoc message shows the documentation for the wrong function (or no
> documentation at all) in this specific situation:
> 
> (a) You're typing an elisp expression into `read-from-minibuffer', and
> (b) the function name contains punctuation, such as ! or ?, whose
> character class is "punctuation" and not "symbol" in the standard syntax
> table.
> 
> Function names as described in (b) are not only legal but quite common
> in third-party code. There aren't many in the standard distribution, but
> you'll notice a few here and there. Try this:
> 
> (require 'pcvs)
> (call-interactively #'eval-expression)
> -----
> Eval: (cvs-mode!
> -----
> 
> The mode line shows the documentation for `cvs-mode' (without the !),
> which is a different function and has a different lambda list.
> 
> This is happening because the syntax table in the minibuffer never gets
> changed to the elisp table, which acknowledges all the valid symbol
> characters as part of the "symbol" class.
> 
> There are a couple different spots in the code to which you could
> attribute this lapse. For one, the elisp-mode.el function
> `elisp--current-symbol' isn't wrapped in a `with-syntax-table', unlike
> other similar definitions in the same file. I think anyone invoking this
> function could reasonably expect it to observe elisp syntax, so that's
> what my tiny patch addresses. This fixes the Eldoc problem.
> 
> But here's another weird thing further down the call stack.
> `read--expression' has a FIXME comment saying to turn on
> `emacs-lisp-mode' in the minibuffer -- which would also set the
> appropriate syntax table -- but it doesn't actually do it. I guess that
> must not work for whatever reason (since it has to have taken longer to
> write the comment than it would have taken to add the code). Should it
> be changed now so that it does set the major mode? Is there a problem
> with specialized major modes in the minibuffer? I hereby kick the can
> over to whoever knows more.
> 
> Daniel
> 
> 
> [2:text/x-patch Hide Save:0001-lisp-progmodes-elisp-mode.el-elisp-current-symbol-Se.patch (1kB)]
> 
> >From 1d4ed0e89b4ebc040609b7476128062685843c7f Mon Sep 17 00:00:00 2001
> From: Daniel Koning <dk@danielkoning.com>
> Date: Tue, 9 Jun 2020 19:24:11 -0500
> Subject: [PATCH] lisp/progmodes/elisp-mode.el (elisp--current-symbol): Set
>  syntax table.
> 
> Even if `elisp-current-symbol' is called from a buffer with a different
> active syntax table (such as the minibuffer in `read-from-minibuffer'),
> use `emacs-lisp-mode-syntax-table' to determine the symbol boundaries.
> 
> Copyright-paperwork-exempt: yes
> ---
>  lisp/progmodes/elisp-mode.el | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
> index f39ecf9b7b..65c01b2ce1 100644
> --- a/lisp/progmodes/elisp-mode.el
> +++ b/lisp/progmodes/elisp-mode.el
> @@ -1615,10 +1615,11 @@ elisp--beginning-of-sexp
>  
>  ;; returns nil unless current word is an interned symbol.
>  (defun elisp--current-symbol ()
> -  (let ((c (char-after (point))))
> -    (and c
> -         (memq (char-syntax c) '(?w ?_))
> -         (intern-soft (current-word)))))
> +  (with-syntax-table emacs-lisp-mode-syntax-table
> +    (let ((c (char-after (point))))
> +      (and c
> +           (memq (char-syntax c) '(?w ?_))
> +           (intern-soft (current-word))))))
>  
>  (defun elisp-function-argstring (arglist)
>    "Return ARGLIST as a string enclosed by ().
> -- 
> 2.20.1
> 





  reply	other threads:[~2020-06-20  7:49 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-10  2:56 bug#41781: 27.0.91; [PATCH] Eldoc describes the wrong function when reading an expression from the minibuffer Daniel Koning
2020-06-20  7:49 ` Eli Zaretskii [this message]
2020-06-20 16:51   ` Stefan Monnier
2020-06-23  0:08     ` Daniel Koning
2020-06-23  4:17       ` Stefan Monnier
2020-06-23 13:58         ` Daniel Koning
2020-06-23 14:09           ` Stefan Monnier
2020-06-23 16:42             ` Daniel Koning
2020-06-23 18:37               ` Stefan Monnier
2020-07-04  7:57       ` Eli Zaretskii
2020-08-05 15:59         ` Lars Ingebrigtsen
2020-08-08  8:09           ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83h7v6w51h.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=41781@debbugs.gnu.org \
    --cc=dk@danielkoning.com \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).