A really powerful Emacs feature for those who know a bit of Elisp in the ability to advise functions. Historically, the defadvice
macro allowed the specification of code to run before, after, or around a function call. It’s really handy for modifying the action of a function without changing the function itself or getting into the details of how a function works. I have advice for 7 functions in my init.el
, an indication that it’s more useful than you might think.
The defadvice
macro has been obsoleted by the newer and more flexible advice-add
and add-function
macros. You’ll usually want to use advice-add
because it works in more situations. The new macros support a finer grained specification of where the advice is to be applied.
Kaushal Modi over at A Scripter’s Notes has an excellent post that explains all the methods of specifying where the advice will operate. These methods are called “advice combinators”. Modi has what are essentially railway diagrams that illustrate the operation of each of the combinators. They’re an easy way of understanding what each of them does. He also has a summary table that describes in words how each of them works.
You should also take a look at the built-in add-function
documentation that shows the new function that is created for each of the combinators.
Modi’s post is the best explanation of using advice that I’ve seen. You should definitely take a look at his post to see what’s possible.