all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#35663: 27.0.50; Eldoc support for apply
@ 2019-05-10  0:11 Michael Heerdegen
  2019-05-10  0:58 ` Noam Postavsky
  2020-08-26 10:32 ` Lars Ingebrigtsen
  0 siblings, 2 replies; 8+ messages in thread
From: Michael Heerdegen @ 2019-05-10  0:11 UTC (permalink / raw)
  To: 35663

[-- Attachment #1: Type: text/plain, Size: 337 bytes --]


Hello,

when editing something like

(apply #'call-process
  (car command)
  nil
  (if stderr-file (list t stderr-file) t)
  nil
  (append (cdr command) (list archive name)))

eldoc support would be useful to see the argument names of
'call-process' instead of the signature of 'apply'.

Would doing something like this be acceptable?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-WIP-Make-eldoc-handle-apply-specially.patch --]
[-- Type: text/x-diff, Size: 1540 bytes --]

From 5eb45fe4a22bb8d130e5318335439b11ef00623b Mon Sep 17 00:00:00 2001
From: Michael Heerdegen <michael_heerdegen@web.de>
Date: Fri, 10 May 2019 02:00:18 +0200
Subject: [PATCH] WIP: Make eldoc handle 'apply' specially

---
 lisp/progmodes/elisp-mode.el | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index cb1b17b447..7631bc60b1 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1356,6 +1356,16 @@ elisp-eldoc-documentation-function
 	  ((eq current-symbol (car current-fnsym))
 	   (or (apply #'elisp-get-fnsym-args-string current-fnsym)
 	       (elisp-get-var-docstring current-symbol)))
+          ((and (memq (car current-fnsym) '(apply apply-partially))
+                (< 1 (cadr current-fnsym))
+                (let ((args (save-excursion
+                              (let ((argument-index (- (elisp--beginning-of-sexp) 2)))
+                                (forward-sexp)
+                                (save-match-data
+                                  (and (looking-at (rx (* (or space "\n")) (or "`" "'" "#'")))
+                                       (goto-char (match-end 0))
+                                       (list (elisp--current-symbol) argument-index)))))))
+                  (and args (apply #'elisp-get-fnsym-args-string args)))))
 	  (t
 	   (or (elisp-get-var-docstring current-symbol)
 	       (apply #'elisp-get-fnsym-args-string current-fnsym))))))
--
2.20.1


[-- Attachment #3: Type: text/plain, Size: 288 bytes --]


We could also make the displayed text more special to show that this is
actually an 'apply' call and handle the last argument specially but I
think it would be overkill to add so much code for this side case.  OTOH
the suggested patch above already feels like a big relief.


Michael.



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2019-05-10  0:11 bug#35663: 27.0.50; Eldoc support for apply Michael Heerdegen
@ 2019-05-10  0:58 ` Noam Postavsky
  2019-05-10 10:24   ` Michael Heerdegen
  2020-08-26 10:32 ` Lars Ingebrigtsen
  1 sibling, 1 reply; 8+ messages in thread
From: Noam Postavsky @ 2019-05-10  0:58 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 35663

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Hello,
>
> when editing something like
>
> (apply #'call-process
>   (car command)
>   nil
>   (if stderr-file (list t stderr-file) t)
>   nil
>   (append (cdr command) (list archive name)))
>
> eldoc support would be useful to see the argument names of
> 'call-process' instead of the signature of 'apply'.

Yes, I've kind of wanted something like this for a while.  

> +          ((and (memq (car current-fnsym) '(apply apply-partially))

funcall too please? :)

> We could also make the displayed text more special to show that this is
> actually an 'apply' call and handle the last argument specially but I
> think it would be overkill to add so much code for this side case.

Yeah, and I doubt any sort of eldoc display would be of much use for the
last apply arg anyway.





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2019-05-10  0:58 ` Noam Postavsky
@ 2019-05-10 10:24   ` Michael Heerdegen
  2019-05-10 10:28     ` Noam Postavsky
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Heerdegen @ 2019-05-10 10:24 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 35663

Noam Postavsky <npostavs@gmail.com> writes:

> > +          ((and (memq (car current-fnsym) '(apply apply-partially))
>
> funcall too please? :)

Why would you want to write something like (funcall #'fun arg ...) when
FUN is a symbol?


Michael.





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2019-05-10 10:24   ` Michael Heerdegen
@ 2019-05-10 10:28     ` Noam Postavsky
  2019-05-10 11:41       ` Michael Heerdegen
  0 siblings, 1 reply; 8+ messages in thread
From: Noam Postavsky @ 2019-05-10 10:28 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 35663

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Noam Postavsky <npostavs@gmail.com> writes:
>
>> > +          ((and (memq (car current-fnsym) '(apply apply-partially))
>>
>> funcall too please? :)
>
> Why would you want to write something like (funcall #'fun arg ...) when
> FUN is a symbol?

Hmm, maybe I mixed this is up with stepping into funcall/apply with
edebug.





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2019-05-10 10:28     ` Noam Postavsky
@ 2019-05-10 11:41       ` Michael Heerdegen
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Heerdegen @ 2019-05-10 11:41 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 35663

Noam Postavsky <npostavs@gmail.com> writes:

> Hmm, maybe I mixed this is up with stepping into funcall/apply with
> edebug.

Probably.  We should also fix this.  I currently use this hack as
workaround:

(advice-add
 'edebug-instrument-callee :around
 (defun my-edebug-instrument-callee--around-ad (f)
   (condition-case nil
       (funcall f)
     (error
      (when (y-or-n-p "edebug-instrument-callee error - select a function by name?")
        (edebug-instrument-function
         (intern
          (completing-read
           "Function to instrument: " obarray #'fboundp t
           (when (looking-at "\(\\(?:funcall\\|apply\\|funcall-interactively\\) +\\(?:#?'\\)?\\(\\(?:\\sw\\|\\s_\\)+\\)[ \)]")
             (match-string 1))))))))))

I guess in unambiguous cases we can even omit prompting.

Michael.





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2019-05-10  0:11 bug#35663: 27.0.50; Eldoc support for apply Michael Heerdegen
  2019-05-10  0:58 ` Noam Postavsky
@ 2020-08-26 10:32 ` Lars Ingebrigtsen
  2020-08-26 11:11   ` João Távora
  1 sibling, 1 reply; 8+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-26 10:32 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 35663, João Távora

Michael Heerdegen <michael_heerdegen@web.de> writes:

> when editing something like
>
> (apply #'call-process
>   (car command)
>   nil
>   (if stderr-file (list t stderr-file) t)
>   nil
>   (append (cdr command) (list archive name)))
>
> eldoc support would be useful to see the argument names of
> 'call-process' instead of the signature of 'apply'.

Yeah, that would be really nice...  Some people might want to know what
the signature to apply is, though, but probably a lot fewer.

> @@ -1356,6 +1356,16 @@ elisp-eldoc-documentation-function
>  	  ((eq current-symbol (car current-fnsym))
>  	   (or (apply #'elisp-get-fnsym-args-string current-fnsym)
>  	       (elisp-get-var-docstring current-symbol)))
> +          ((and (memq (car current-fnsym) '(apply apply-partially))
> +                (< 1 (cadr current-fnsym))
> +                (let ((args (save-excursion

[...]

The patch no longer applies, because eldoc has been rewritten
substantially over the last year.  Is there any interest in resurrecting
this patch and getting it applied?  I've added João to the Cc.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2020-08-26 10:32 ` Lars Ingebrigtsen
@ 2020-08-26 11:11   ` João Távora
  2020-08-27 13:07     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 8+ messages in thread
From: João Távora @ 2020-08-26 11:11 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Michael Heerdegen, 35663

[-- Attachment #1: Type: text/plain, Size: 1880 bytes --]

Hi,

I think this makes sense. SLY/SLIME for CL do something similar
with #'make-instance, for instance.  As soon as you type the function name
or class name and the autodoc system recognizes it, it switches to the
showing you the args for that function instead.

The patch shouldn't be terribly difficult to adapt, since I've not
significantly
touched the client-side logic (as in clients of eldoc).

I think you can try doing so. I'll keep this on my radar,
João

On Wed, Aug 26, 2020 at 11:32 AM Lars Ingebrigtsen <larsi@gnus.org> wrote:

> Michael Heerdegen <michael_heerdegen@web.de> writes:
>
> > when editing something like
> >
> > (apply #'call-process
> >   (car command)
> >   nil
> >   (if stderr-file (list t stderr-file) t)
> >   nil
> >   (append (cdr command) (list archive name)))
> >
> > eldoc support would be useful to see the argument names of
> > 'call-process' instead of the signature of 'apply'.
>
> Yeah, that would be really nice...  Some people might want to know what
> the signature to apply is, though, but probably a lot fewer.
>
> > @@ -1356,6 +1356,16 @@ elisp-eldoc-documentation-function
> >         ((eq current-symbol (car current-fnsym))
> >          (or (apply #'elisp-get-fnsym-args-string current-fnsym)
> >              (elisp-get-var-docstring current-symbol)))
> > +          ((and (memq (car current-fnsym) '(apply apply-partially))
> > +                (< 1 (cadr current-fnsym))
> > +                (let ((args (save-excursion
>
> [...]
>
> The patch no longer applies, because eldoc has been rewritten
> substantially over the last year.  Is there any interest in resurrecting
> this patch and getting it applied?  I've added João to the Cc.
>
> --
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no
>


-- 
João Távora

[-- Attachment #2: Type: text/html, Size: 2736 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#35663: 27.0.50; Eldoc support for apply
  2020-08-26 11:11   ` João Távora
@ 2020-08-27 13:07     ` Lars Ingebrigtsen
  0 siblings, 0 replies; 8+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-27 13:07 UTC (permalink / raw)
  To: João Távora; +Cc: Michael Heerdegen, 35663

João Távora <joaotavora@gmail.com> writes:

> I think this makes sense. SLY/SLIME for CL do something similar
> with #'make-instance, for instance.  As soon as you type the function name
> or class name and the autodoc system recognizes it, it switches to the 
> showing you the args for that function instead.
>
> The patch shouldn't be terribly difficult to adapt, since I've not
> significantly touched the client-side logic (as in clients of eldoc).

I had a very brief look at adapting the patch to the new eldoc setup --
I guess the code should go into elisp-eldoc-funcall?

However, the parameters have changed somewhat, and I'm not familiar with
this code at all, so I think it would be preferable if somebody else
took a look at it.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-08-27 13:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-10  0:11 bug#35663: 27.0.50; Eldoc support for apply Michael Heerdegen
2019-05-10  0:58 ` Noam Postavsky
2019-05-10 10:24   ` Michael Heerdegen
2019-05-10 10:28     ` Noam Postavsky
2019-05-10 11:41       ` Michael Heerdegen
2020-08-26 10:32 ` Lars Ingebrigtsen
2020-08-26 11:11   ` João Távora
2020-08-27 13:07     ` Lars Ingebrigtsen

Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.