1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-28 07:45:00 +00:00

Set the 'name' prop in 'define-advice'

In addition to naming the advice function `symbol@name', set
the 'name' property to NAME.
* lisp/emacs-lisp/nadvice.el (define-advice): set the 'name'
property to NAME (requested in Bug#68114).  Fixes Bug#68294.

* doc/lispref/functions.texi (Advising Named Functions): Document
that 'define-advice' installs the advice with the specified name.
This commit is contained in:
Steven Allen 2024-01-06 09:19:12 -08:00 committed by Eli Zaretskii
parent f2cc8ee2a1
commit 9b8b352ebc
3 changed files with 15 additions and 6 deletions

View File

@ -2066,9 +2066,10 @@ code) obey the advice and other calls (from C code) do not.
@defmac define-advice symbol (where lambda-list &optional name depth) &rest body
This macro defines a piece of advice and adds it to the function named
@var{symbol}. The advice is an anonymous function if @var{name} is
@code{nil} or a function named @code{symbol@@name}. See
@code{advice-add} for explanation of other arguments.
@var{symbol}. If @var{name} is non-nil, the advice is named
@code{@var{symbol}@@@var{name}} and installed with the name @var{name}; otherwise,
the advice is anonymous. See @code{advice-add} for explanation of
other arguments.
@end defmac
@defun advice-add symbol where function &optional props

View File

@ -1410,6 +1410,12 @@ values.
* Lisp Changes in Emacs 30.1
+++
** 'define-advice' now sets the new advice's 'name' property to NAME
Named advice defined with 'define-advice' can now be removed with
'(advice-remove SYMBOL NAME)' in addition to '(advice-remove SYMBOL
SYMBOL@NAME)'.
+++
** New function 'require-with-check' to detect new versions shadowing.
This is like 'require', but it checks whether the argument 'feature'

View File

@ -585,8 +585,8 @@ of the piece of advice."
(defmacro define-advice (symbol args &rest body)
"Define an advice and add it to function named SYMBOL.
See `advice-add' and `add-function' for explanation on the
arguments. Note if NAME is nil the advice is anonymous;
otherwise it is named `SYMBOL@NAME'.
arguments. If NAME is non-nil, the advice is named `SYMBOL@NAME'
and installed with the name NAME; otherwise, the advice is anonymous.
\(fn SYMBOL (HOW LAMBDA-LIST &optional NAME DEPTH) &rest BODY)"
(declare (indent 2) (doc-string 3) (debug (sexp sexp def-body)))
@ -597,7 +597,9 @@ otherwise it is named `SYMBOL@NAME'.
(lambda-list (nth 1 args))
(name (nth 2 args))
(depth (nth 3 args))
(props (and depth `((depth . ,depth))))
(props (append
(and depth `((depth . ,depth)))
(and name `((name . ,name)))))
(advice (cond ((null name) `(lambda ,lambda-list ,@body))
((or (stringp name) (symbolp name))
(intern (format "%s@%s" symbol name)))