1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Optionally display function docstring in eldoc

Allow display (optionally) function docstring in eldoc. (Bug#77124)
* etc/NEWS: Document changes.
* lisp/progmodes/elisp-mode.el
(elisp-eldoc-funcall-with-docstring-length): New user option.
(elisp-eldoc-funcall-with-docstring): New function.
This commit is contained in:
Elías Gabriel Pérez 2025-03-19 12:01:22 -06:00 committed by Eli Zaretskii
parent c73e4cdece
commit 8fc18d0968
2 changed files with 57 additions and 0 deletions

View file

@ -565,6 +565,19 @@ The prompts 'opstring' and 'active-opstring' can now either be strings
or functions. This is useful when your prompts can benefit from dynamic
content.
** ElDoc
---
*** New eldoc function 'elisp-eldoc-funcall-with-docstring'.
This function includes the current function docstring in eldoc echo area
and can be used as a more detailed alternative to 'elisp-eldoc-funcall'.
---
*** New user option 'elisp-eldoc-funcall-with-docstring-length'.
This user option specifies how long function docstring must be displayed
in 'elisp-eldoc-funcall-with-docstring'. If set to 'short' only display
cut docstring before period. Otherwise if set to 'full', display full
docstring.'
---
** Buffer Menu

View file

@ -1845,6 +1845,50 @@ Intended for `eldoc-documentation-functions' (which see)."
'font-lock-function-name-face
'font-lock-keyword-face)))))
(defcustom elisp-eldoc-funcall-with-docstring-length 'short
"Control length of doc string shown by `elisp-eldoc-funcall-with-docstring'.
If set to `short', only show the first sentence of the doc string.
Otherwise if set to `full', display full doc string."
:type '(choice
(const :tag "Short" short)
(const :tag "Full" full))
:group 'elisp
:version "31.1")
(defun elisp-eldoc-funcall-with-docstring (callback &rest _ignored)
"Document function call at point by calling CALLBACK.
Intended for `eldoc-documentation-functions' (which see).
Compared to `elisp-eldoc-funcall', this also includes the
current function doc string, doc string length depends on
`elisp-eldoc-funcall-with-docstring-length'."
(let* ((sym-info (elisp--fnsym-in-current-sexp))
(fn-sym (car sym-info))
(doc (when (fboundp fn-sym)
(propertize
(cdr (help-split-fundoc
(condition-case nil (documentation fn-sym t)
(invalid-function nil))
fn-sym))
'face 'font-lock-doc-face))))
(when fn-sym
(funcall callback
(concat (apply #'elisp-get-fnsym-args-string sym-info)
;; Ensure not display the docstring in the
;; mode-line.
(when (and doc (not (minibufferp)))
(concat
"\n"
(pcase elisp-eldoc-funcall-with-docstring-length
('full doc)
('short
(save-match-data
(when (string-match "\\." doc)
(concat "\n" (substring doc 0 (match-end 0))))))))))
:thing fn-sym
:face (if (functionp fn-sym)
'font-lock-function-name-face
'font-lock-keyword-face)))))
(defun elisp-eldoc-var-docstring (callback &rest _ignored)
"Document variable at point by calling CALLBACK.
Intended for `eldoc-documentation-functions' (which see).