From: Mark Oteiza <mvoteiza@udel.edu>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH v3] RFC: eldoc-documentation-functions hook
Date: Wed, 6 Jul 2016 23:30:19 -0400 [thread overview]
Message-ID: <20160707033019.GA22360@holos.localdomain> (raw)
In-Reply-To: <20160617210849.GA3775@holos.localdomain>
On 17/06/16 at 05:08pm, Mark Oteiza wrote:
> ---
> On 13/06/16 at 05:17pm, Mark Oteiza wrote:
> > On 12/06/16 at 02:24pm, Mark Oteiza wrote:
> > > On 12/06/16 at 10:09am, Eli Zaretskii wrote:
> > > > > Date: Sun, 12 Jun 2016 02:12:29 -0400
> > > > > From: Mark Oteiza <mvoteiza@udel.edu>
> > > > >
> > > > > This is a draft patch changing eldoc-documentation-function into a hook
> > > > > variable, so instead of using add-function, one can instead use add-hook
> > > > > to control the behavior of eldoc. It is backwards compatible.
> > > >
> > > > Thanks. Please be sure to update the ELisp manual accordingly.
> > >
> > > <snip> changed the default value back to nil, since this isn't being
> > > unconditionally funcall'd anymore.
> >
> > Ah, this was a mistake wrt backwards compatibility. The default can be
> > changed sometime in the future, I suppose.
> >
> > Also had to fix eldoc-supported-p...
> >
> > > In the manual, it appears that the -functions suffix is to be used for
> > > abnormal hooks; however this is a normal hook, so it would seem the name
> > > should use the -hook suffix.
> >
> > ... but I'll wait for some judgement on this before sending another
> > patch.
>
> Nevermind, I missed the part of the manual that says -functions is used
> when a hooks result is used.
>
> Here is the patch that I have been using. No problems encountered.
>
> diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
> index 7b76e6a..b5d07da 100644
> --- a/doc/lispref/modes.texi
> +++ b/doc/lispref/modes.texi
> @@ -417,7 +417,7 @@ Major Mode Conventions
>
> @item
> The mode can specify a local value for
> -@code{eldoc-documentation-function} to tell ElDoc mode how to handle
> +@code{eldoc-documentation-functions} to tell ElDoc mode how to handle
> this mode.
>
> @item
> diff --git a/etc/NEWS b/etc/NEWS
> index e2c99a1..92bf8e4 100644
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -212,6 +212,11 @@ viewing HTML files and the like.
> breakpoint (e.g. with "f" and "o") by customizing the new option
> 'edebug-sit-on-break'.
>
> +** ElDoc
> +
> ++++
> +*** 'eldoc-documentation-functions' replaces 'eldoc-documentation-function'.
> +
> ** eww
>
> +++
> diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
> index 6c2f869..67d0a9e 100644
> --- a/lisp/emacs-lisp/eldoc.el
> +++ b/lisp/emacs-lisp/eldoc.el
> @@ -43,7 +43,7 @@
>
> ;; Major modes for other languages may use ElDoc by defining an
> ;; appropriate function as the buffer-local value of
> -;; `eldoc-documentation-function'.
> +;; `eldoc-documentation-functions'.
>
> ;;; Code:
>
> @@ -80,7 +80,7 @@ eldoc-argument-case
> returns another string is acceptable.
>
> Note that this variable has no effect, unless
> -`eldoc-documentation-function' handles it explicitly."
> +`eldoc-documentation-functions' handle it explicitly."
> :type '(radio (function-item upcase)
> (function-item downcase)
> function)
> @@ -103,7 +103,7 @@ eldoc-echo-area-use-multiline-p
> truncated to make more of the arglist or documentation string visible.
>
> Note that this variable has no effect, unless
> -`eldoc-documentation-function' handles it explicitly."
> +`eldoc-documentation-functions' handle it explicitly."
> :type '(radio (const :tag "Always" t)
> (const :tag "Never" nil)
> (const :tag "Yes, but truncate symbol names if it will\
> @@ -113,8 +113,8 @@ eldoc-echo-area-use-multiline-p
> (defface eldoc-highlight-function-argument
> '((t (:inherit bold)))
> "Face used for the argument at point in a function's argument list.
> -Note that this face has no effect unless the `eldoc-documentation-function'
> -handles it explicitly."
> +Note that this face has no effect unless the `eldoc-documentation-functions'
> +handle it explicitly."
> :group 'eldoc)
>
> ;;; No user options below here.
> @@ -186,7 +186,7 @@ eldoc-mode
> :group 'eldoc :lighter eldoc-minor-mode-string
> (setq eldoc-last-message nil)
> (cond
> - ((memq eldoc-documentation-function '(nil ignore))
> + ((not (eldoc-supported-p))
> (message "There is no ElDoc support in this buffer")
> (setq eldoc-mode nil))
> (eldoc-mode
> @@ -211,7 +211,7 @@ global-eldoc-mode
>
> If Global Eldoc mode is on, `eldoc-mode' will be enabled in all
> buffers where it's applicable. These are buffers that have modes
> -that have enabled eldoc support. See `eldoc-documentation-function'."
> +that have enabled eldoc support. See `eldoc-documentation-functions'."
> :group 'eldoc
> :global t
> :initialize 'custom-initialize-delay
> @@ -236,9 +236,7 @@ eldoc-schedule-timer
> eldoc-idle-delay nil
> (lambda ()
> (when (or eldoc-mode
> - (and global-eldoc-mode
> - (not (memq eldoc-documentation-function
> - '(nil ignore)))))
> + (and global-eldoc-mode (eldoc-supported-p)))
> (eldoc-print-current-symbol-info))))))
>
> ;; If user has changed the idle delay, update the timer.
> @@ -334,26 +332,29 @@ eldoc-display-message-no-interference-p
>
> \f
> ;;;###autoload
> -(defvar eldoc-documentation-function #'ignore
> - "Function to call to return doc string.
> -The function of no args should return a one-line string for displaying
> -doc about a function etc. appropriate to the context around point.
> -It should return nil if there's no doc appropriate for the context.
> -Typically doc is returned if point is on a function-like name or in its
> -arg list.
> +(defvar eldoc-documentation-functions #'ignore
> + "Hook to run to obtain doc string.
> +Each element of this variable should be a function of no args
> +that returns a one-line string for displaying doc about a
> +function etc. appropriate to the context around point. It should
> +return nil if there is no doc appropriate for the context.
> +Typically, doc is returned if point is on a function-like name or
> +in its arg list.
>
> The result is used as is, so the function must explicitly handle
> the variables `eldoc-argument-case' and `eldoc-echo-area-use-multiline-p',
> and the face `eldoc-highlight-function-argument', if they are to have any
> effect.
>
> -Major modes should modify this variable using `add-function', for example:
> - (add-function :before-until (local \\='eldoc-documentation-function)
> - #\\='foo-mode-eldoc-function)
> +Major modes should modify this variable using `add-hook', for example:
> + (add-hook \\='eldoc-documentation-functions #\\='foo-eldoc nil t)
> so that the global documentation function (i.e. the default value of the
> variable) is taken into account if the major mode specific function does not
> return any documentation.")
>
> +(define-obsolete-variable-alias 'eldoc-documentation-function
> + 'eldoc-documentation-functions "25.2")
> +
> (defun eldoc-print-current-symbol-info ()
> ;; This is run from post-command-hook or some idle timer thing,
> ;; so we need to be careful that errors aren't ignored.
> @@ -363,7 +364,20 @@ eldoc-print-current-symbol-info
> (when eldoc-last-message
> (eldoc-message nil)
> nil))
> - (eldoc-message (funcall eldoc-documentation-function)))))
> + (eldoc-message
> + (run-hook-with-args-until-success 'eldoc-documentation-functions)))))
> +
> +(defun eldoc-supported-p ()
> + "Return t if `eldoc-documentation-functions' has non-null elements."
> + (if (listp eldoc-documentation-functions)
> + (catch :eldoc-supported
> + (mapc
> + (lambda (fun)
> + (when (not (memq fun '(nil ignore)))
> + (throw :eldoc-supported t)))
> + eldoc-documentation-functions)
> + nil)
> + (not (memq eldoc-documentation-functions '(nil ignore)))))
>
> ;; If the entire line cannot fit in the echo area, the symbol name may be
> ;; truncated or eliminated entirely from the output to make room for the
Applied with some wording changes as 5811404
next prev parent reply other threads:[~2016-07-07 3:30 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-12 6:12 [PATCH] RFC: eldoc-documentation-functions hook Mark Oteiza
2016-06-12 7:09 ` Eli Zaretskii
2016-06-12 7:46 ` Leo Liu
2016-06-12 8:33 ` Eli Zaretskii
2016-06-12 18:24 ` Mark Oteiza
2016-06-13 21:17 ` Mark Oteiza
2016-06-17 21:08 ` [PATCH v3] " Mark Oteiza
2016-07-07 3:30 ` Mark Oteiza [this message]
2016-07-07 4:12 ` Leo Liu
2016-07-07 10:02 ` Kaushal Modi
2016-07-17 15:17 ` Noam Postavsky
2016-07-17 17:48 ` Mark Oteiza
2016-07-17 23:47 ` Dmitry Gutov
2016-07-18 0:09 ` Leo Liu
2016-07-17 18:28 ` Stefan Monnier
2016-07-17 18:52 ` Stefan Monnier
2016-07-18 21:27 ` Mark Oteiza
2016-07-19 2:47 ` Stefan Monnier
2016-07-19 23:20 ` Mark Oteiza
2016-07-20 1:50 ` Clément Pit--Claudel
2016-07-20 4:50 ` John Wiegley
2016-07-20 23:03 ` Mark Oteiza
2016-07-07 14:55 ` Clément Pit--Claudel
2016-06-12 13:23 ` [PATCH] " Noam Postavsky
2016-06-12 18:52 ` Mark Oteiza
2016-06-12 18:57 ` Dmitry Gutov
2016-06-12 19:44 ` Mark Oteiza
2016-06-12 19:50 ` Dmitry Gutov
2016-06-13 20:36 ` Richard Stallman
2016-06-19 2:45 ` Dmitry Gutov
2016-06-20 23:00 ` Richard Stallman
2016-06-13 4:37 ` Leo Liu
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=20160707033019.GA22360@holos.localdomain \
--to=mvoteiza@udel.edu \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/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).