Next: , Previous: Around-Advice, Up: Advising Functions

17.4 Computed Advice

The macro defadvice resembles defun in that the code for the advice, and all other information about it, are explicitly stated in the source code. You can also create advice whose details are computed, using the function ad-add-advice.

— Function: ad-add-advice function advice class position

Calling ad-add-advice adds advice as a piece of advice to function in class class. The argument advice has this form:

          (name protected enabled definition)

Here, protected and enabled are flags; if protected is non-nil, the advice is protected against non-local exits (see Defining Advice), and if enabled is nil the advice is initially disabled (see Enabling Advice). definition should have the form

          (advice . lambda)

where lambda is a lambda expression; this lambda expression is called in order to perform the advice. See Lambda Expressions.

If the function argument to ad-add-advice already has one or more pieces of advice in the specified class, then position specifies where in the list to put the new piece of advice. The value of position can either be first, last, or a number (counting from 0 at the beginning of the list). Numbers outside the range are mapped to the beginning or the end of the range, whichever is closer. The position value is ignored when redefining an existing piece of advice.

If function already has a piece of advice with the same name, then the position argument is ignored and the old advice is replaced with the new one.