From b8c4a9e0f8d10b2c3948d8f12279238b1e58b76d Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=A0t=C4=9Bp=C3=A1n=20N=C4=9Bmec?= Date: Sun, 18 Aug 2019 16:05:48 -0700 Subject: [PATCH] Add an advice-add/interactive spec example * doc/lispref/functions.texi (Core Advising Primitives): Add an advice-add example that extends the `interactive' spec (bug#17871). --- doc/lispref/functions.texi | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index e65d398c438..d082225dd00 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -1752,6 +1752,30 @@ with such a spec would, and then return the corresponding list of arguments that was built. E.g., @code{(advice-eval-interactive-spec "r\nP")} will return a list of three elements, containing the boundaries of the region and the current prefix argument. + +For instance, if you want to make the @kbd{C-x m} +(@code{compose-mail}) command prompt for a @samp{From:} header, you +could say something like this: + +@example +(defun my-compose-mail-advice (orig &rest args) + "Read From: address interactively." + (interactive + (lambda (spec) + (let* ((user-mail-address + (completing-read "From: " + '("one.address@@example.net" + "alternative.address@@example.net"))) + (from (message-make-from user-full-name + user-mail-address)) + (spec (advice-eval-interactive-spec spec))) + ;; Put the From header into the OTHER-HEADERS argument. + (push (cons 'From from) (nth 2 spec)) + spec))) + (apply orig args)) + +(advice-add 'compose-mail :around #'my-compose-mail-advice) +@end example @end defun @node Advising Named Functions -- 2.39.2