From: "João Távora" <joaotavora@gmail.com>
To: martin rudalics <rudalics@gmx.at>
Cc: larsi@gnus.org, Yuan Fu <casouri@gmail.com>, 43609@debbugs.gnu.org
Subject: bug#43609: 28.0.50; eldoc-documentation-function [vs new eldoc-display-functions]
Date: Tue, 27 Oct 2020 19:56:53 +0000 [thread overview]
Message-ID: <87imavo322.fsf@gmail.com> (raw)
In-Reply-To: <64831acc-996e-51d7-ce6f-b667a6334e3c@gmx.at> (martin rudalics's message of "Tue, 27 Oct 2020 19:05:37 +0100")
[Lars, I'm CC'ing you specifcally since there's a patch to review at the
end.]
martin rudalics <rudalics@gmx.at> writes:
>> I'd like to help you, but I don't understand: are you updating Emacs to
>> master in all 50 of those drives? Do you do this 50 times? By hand?
>> Why can't you update your eldoc-tooltip.el in the process?
>
> Every year I experience around two or three crashes among my machines
> which run various operating systems ranging from Windows XP to Windows
> 10 and old stable to unstable Debian. When a HD drive crashes, I try
> to recreate the prior state by plugging in an older disk or copy the
> contents of that older disk into a new one. Thereafter, I usually
> update my Emacs repositories reusing my older libraries. If I also have
> to update my libraries, I'm ending up in Augean stables.
I'm not sure I follow 100%, I'm just thinking that whatever process you
use to update Emacs in those machines you can also use to update
eldoc-tooltip.el.
> Then I fail to understand why my old code stopped working after your
> changes. On the version of master I'm currently using here it's even
> documented in the Elisp manual as
>
> ‘eldoc-documentation-function’
> This variable holds the function which is used to retrieve
> documentation for the item at point from the functions in the hook
> ‘eldoc-documentation-functions’. By default,
> ‘eldoc-documentation-function’ returns the first documentation
> string produced by the ‘eldoc-documentation-functions’ hook.
And these things are true, still today, as far as I know. What I meant
is that the link between eldoc-documentation-function and
eldoc-documentation-functions was already established. You were arguing
for some conceptual separation between these two variables and I noted
that they were already interconnected.
>> If "function definitions" were at stake, I would certainly agree with
>> you. But they're not.
>
> Here 'elisp-eldoc-documentation-function' is a function defined in
> elisp-mode.el. IIUC this function has gone now.
Ah right, then I misunderstood: you're talking about _that_ function.
That is indeed a function. I thought you were talking about
eldoc-documentation-function, the variable, since that seems~ to have
been the original problem. But what you're requesting seems to be the
functionally the martin() function I gave you earlier, right?
(defun martin ()
"CAUTION: Only works in default Emacs Lisp mode or modes with all-sync
docstring generating functions. If some functions calls the
callback afterwards, that result is discarded."
...)
So you'd like it to be called elisp-eldoc-documentation-function, and
put in elisp-mode.el, right? That _could_ be done, I guess, and I've
attached a patch at the end of this message.
But there's still something I don't understand: in your original
martin-tooltip.el library you didn't call this e-e-d-f function, did
you? AFAIU, you did:
(funcall eldoc-documentation-function)
or am I mistaken? So you'd have to change your code anyway to now call
elisp-eldoc-documentation-function, right? So, if you're going to
change it, why not change it to the new, better alternatives I have
presented?
Regardless, here's my take on '--': The presence of '--' clearly
specifies something to be an internal implementation detail. But that's
not the same as taking the absence of '--' as a sign that something is
an "external" function. The '--' convention is relatively recent, and
programmers had been using internal details before the convention
existed. This was one of them.
>> If you are going to update Emacs to master in N servers, you might as
>> well update your library in those N servers. If you're updating it by
>> hand, then this doesn't seem like a tremendous extra effort to expend.
>> If you're using a script, just put the library update in that script. I
>> personally use Git to good effect for this: push once, pull many times.
>
> This is not something I do once to be done for ever. It's something
> that I usually have to do in a troublesome situation where I have to
> recover from a previous crash and I'm trying to make some system run
> again. I can't afford to plug in all sorts of hard disk drives in order
> to make them future-proof.
But isn't the problem that you've somehow built or placed a new version
of Emacs in those drives/servers/hosts where an incompatible
martin-tooltip.el lives? I just don't understand why updating an Emacs
executable is somehow feasible in that setup but updating an Elisp
library that it depends on isn't.
>> Alternatively, and perhaps even better, you're invited to contribute
>> your library to Emacs (or GNU ELPA). Then you'll just have to update
>> Emacs, using your preferred method.
>
> I'd still have to update each of my .emacs and install the respective
> calls for each version of Emacs I might use there.
I'm again confused: If you contribute your code to Emacs, then whenever
you update Emacs (which seems to be what you're concerned about) the
facilities you need will just be there.
João
As promised, a patch for you to review (and maybe Lars as well?)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index eed73f5791..f133635ec1 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1411,6 +1411,30 @@ elisp--eldoc-last-data
or argument string for functions.
2 - `function' if function args, `variable' if variable documentation.")
+(defun elisp--documentation-one-liner ()
+ (let* (str
+ (callback (lambda (doc &rest plist)
+ (setq str
+ (format "%s: %s"
+ (propertize (prin1-to-string
+ (plist-get plist :thing))
+ 'face (plist-get plist :face))
+ doc)))))
+ (or (progn (elisp-eldoc-var-docstring callback) str)
+ (progn (elisp-eldoc-funcall callback) str))))
+
+(defalias 'elisp-eldoc-documentation-function 'elisp--documentation-one-liner
+ "Return Elisp documentation for the thing at point as one-line string.
+This is meant as a backward compatibility aid to the \"old\"
+Elisp eldoc behaviour. Consider variable docstrings and function
+signatures only, in this order. If none applies, returns nil.
+Changes to `eldoc-documentation-functions' and
+`eldoc-documentation-strategy' are _not_ reflected here. As such
+it is preferrable to use ElDoc's interfaces directly.")
+
+(make-obsolete 'elisp-eldoc-documentation-function
+ "use ElDoc's interfaces instead." "28.1")
+
(defun elisp-eldoc-funcall (callback &rest _ignored)
"Document function call at point.
Intended for `eldoc-documentation-functions' (which see)."
next prev parent reply other threads:[~2020-10-27 19:56 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-25 8:46 bug#43609: 28.0.50; eldoc-documentation-function martin rudalics
2020-09-26 18:34 ` Dmitry Gutov
2020-09-27 8:30 ` martin rudalics
2020-09-29 11:20 ` Dmitry Gutov
2020-09-29 15:09 ` martin rudalics
2020-09-29 15:23 ` Dmitry Gutov
2020-09-30 8:14 ` martin rudalics
2020-09-30 8:50 ` Dmitry Gutov
2020-09-30 14:37 ` João Távora
2020-09-30 17:33 ` martin rudalics
2020-09-30 18:22 ` João Távora
2020-10-01 8:40 ` martin rudalics
2020-10-01 9:23 ` João Távora
2020-10-03 19:15 ` bug#43609: 28.0.50; eldoc-documentation-function [vs new eldoc-display-functions] João Távora
2020-10-05 8:35 ` martin rudalics
2020-10-05 9:29 ` João Távora
2020-10-06 8:23 ` martin rudalics
2020-10-06 9:29 ` João Távora
2020-10-07 8:36 ` martin rudalics
2020-10-07 8:40 ` João Távora
2020-10-07 9:36 ` João Távora
2020-10-08 8:22 ` martin rudalics
2020-10-08 8:27 ` João Távora
2020-10-09 8:03 ` martin rudalics
2020-10-24 15:18 ` João Távora
2020-10-26 14:12 ` João Távora
2020-10-27 9:59 ` martin rudalics
2020-10-27 9:58 ` martin rudalics
2020-10-27 15:11 ` João Távora
2020-10-27 18:05 ` martin rudalics
2020-10-27 19:56 ` João Távora [this message]
2020-10-28 8:39 ` martin rudalics
2020-10-28 9:38 ` João Távora
2020-10-31 8:01 ` martin rudalics
2020-10-28 9:17 ` Lars Ingebrigtsen
2020-10-28 9:54 ` João Távora
2020-10-30 22:51 ` João Távora
2020-10-31 8:02 ` martin rudalics
2020-10-23 2:37 ` Yuan Fu
2020-10-24 17:09 ` João Távora
2020-10-31 13:07 ` Basil L. Contovounesios
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=87imavo322.fsf@gmail.com \
--to=joaotavora@gmail.com \
--cc=43609@debbugs.gnu.org \
--cc=casouri@gmail.com \
--cc=larsi@gnus.org \
--cc=rudalics@gmx.at \
/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).