Commit 122ff675 authored by Stefan Monnier's avatar Stefan Monnier

* doc/lispref/functions.texi (Advising Functions): New section.

* doc/lispref/modes.texi (Running Hooks): Don't document with-wrapper-hook and
run-hook-wrapped any more.
(Hooks): Link to the new Advising Functions node.
* doc/lispref/elisp.texi (Top): Don't include advice.texi.
* doc/lispref/advice.texi: Remove.
* doc/lispref/makefile.w32-in (srcs):
* doc/lispref/Makefile.in (srcs): Adjust accordingly.
* doc/misc/cl.texi (Function Bindings): Fix incorrect description of cl-let.
parent cd6d07ec
......@@ -218,7 +218,6 @@ xresources.texi cyd
** Check the Lisp manual.
abbrevs.texi rgm
advice.texi cyd
anti.texi rgm
back.texi rgm
backups.texi cyd
......
2014-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
* functions.texi (Advising Functions): New section.
* modes.texi (Running Hooks): Don't document with-wrapper-hook and
run-hook-wrapped any more.
(Hooks): Link to the new Advising Functions node.
* elisp.texi (Top): Don't include advice.texi.
* advice.texi: Remove.
* makefile.w32-in (srcs):
* Makefile.in (srcs): Adjust accordingly.
2014-01-09 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
* text.texi (Parsing HTML/XML): Document `shr-insert-document'.
......
......@@ -76,7 +76,6 @@ srcs = \
$(srcdir)/elisp.texi \
$(emacsdir)/emacsver.texi \
$(srcdir)/abbrevs.texi \
$(srcdir)/advice.texi \
$(srcdir)/anti.texi \
$(srcdir)/backups.texi \
$(srcdir)/buffers.texi \
......
This diff is collapsed.
......@@ -194,7 +194,6 @@ To view this manual in other formats, click
* Loading:: Reading files of Lisp code into Lisp.
* Byte Compilation:: Compilation makes programs run faster.
* Advising Functions:: Adding to the definition of a function.
* Debugging:: Tools and tips for debugging Lisp programs.
* Read and Print:: Converting Lisp objects to text and back.
......@@ -614,19 +613,6 @@ Byte Compilation
* Byte-Code Objects:: The data type used for byte-compiled functions.
* Disassembly:: Disassembling byte-code; how to read byte-code.
Advising Emacs Lisp Functions
* Simple Advice:: A simple example to explain the basics of advice.
* Defining Advice:: Detailed description of @code{defadvice}.
* Around-Advice:: Wrapping advice around a function's definition.
* Computed Advice:: ...is to @code{defadvice} as @code{fset} is to @code{defun}.
* Activation of Advice:: Advice doesn't do anything until you activate it.
* Enabling Advice:: You can enable or disable each piece of advice.
* Preactivation:: Preactivation is a way of speeding up the
loading of compiled advice.
* Argument Access in Advice:: How advice can access the function's arguments.
* Combined Definition:: How advice is implemented.
Debugging Lisp Programs
* Debugger:: A debugger for the Emacs Lisp evaluator.
......@@ -1561,7 +1547,6 @@ Object Internals
@include customize.texi
@include loading.texi
@include compile.texi
@include advice.texi
@c This includes edebug.texi.
@include debugging.texi
......
......@@ -21,6 +21,7 @@ define them.
* Function Cells:: Accessing or setting the function definition
of a symbol.
* Closures:: Functions that enclose a lexical environment.
* Advising Functions:: Adding to the definition of a function.
* Obsolete Functions:: Declaring functions obsolete.
* Inline Functions:: Functions that the compiler will expand inline.
* Declare Form:: Adding additional information about a function.
......@@ -1077,12 +1078,10 @@ This function stores @var{definition} in the function cell of
this is not checked. The argument @var{symbol} is an ordinary evaluated
argument.
The primary use of this function is as a subroutine by constructs that
define or alter functions, like @code{defadvice} (@pxref{Advising
Functions}). (If @code{defun} were not a primitive, it could be
written as a Lisp macro using @code{fset}.) You can also use it to
give a symbol a function definition that is not a list, e.g., a
keyboard macro (@pxref{Keyboard Macros}):
The primary use of this function is as a subroutine by constructs that define
or alter functions, like @code{defun} or @code{advice-add} (@pxref{Advising
Functions}). You can also use it to give a symbol a function definition that
is not a function, e.g., a keyboard macro (@pxref{Keyboard Macros}):
@example
;; @r{Define a named keyboard macro.}
......@@ -1133,6 +1132,269 @@ However, the fact that the internal structure of a closure is
implementation detail. For this reason, we recommend against directly
examining or altering the structure of closure objects.
@node Advising Functions
@section Advising Emacs Lisp Functions
@cindex advising functions
@cindex piece of advice
Any variable or object field which holds a function can be modified with the
appropriate setter function, such as @code{set-process-filter}, @code{fset}, or
@code{setq}, but those can be too blunt, completely throwing away the
previous value.
In order to modify such hooks in a more controlled way, Emacs provides the
macros @code{add-function} and @code{remove-function}, which let you modify the
existing function value by composing it with another function.
For example, in order to trace the calls to a process filter, you can use:
@example
(add-function :before (process-filter proc) #'my-tracing-function)
@end example
This will cause the process's output to be passed first to
@code{my-tracing-function} and then to the original process filter.
When you're done with it, you can revert to the untraced behavior with:
@example
(remove-function (process-filter proc) #'my-tracing-function)
@end example
The argument @code{:before} specifies how the two functions are composed, since
there are many different ways to do it. The added function is also called an
@emph{advice}.
The function cell of a symbol can be manipulated similarly, but since it can
contain other things than a plain function, you have to use @var{advice-add}
and @var{advice-remove} instead, which
@c use @var{add-function} and @var{remove-function} internally, but
know how to handle cases such as when the function cell holds a macro rather
than function, or when the function is autoloaded so the advice's activation
needs to be postponed.
@menu
* Advising Primitives:: Primitives to Manipulate Advices
* Advising Named Functions:: Advising Named Functions
@end menu
@node Advising Primitives
@subsection Primitives to manipulate advice
@defmac add-function where place function &optional props
This macro is the handy way to add the advice @var{function} to the function
stored in @var{place} (@pxref{Generalized Variables}).
@var{where} determines how @var{function} is composed with the
existing function. It can be one of the following:
@table @code
@item :before
Call @var{function} before the old function. Both functions receive the
same arguments, and the return value of the composition is the return value of
the old function. More specifically, the composition of the two functions
behaves like:
@example
(lambda (&rest r) (apply @var{function} r) (apply @var{oldfun} r))
@end example
This is similar to @code{(add-hook @var{hook} @var{function})}, except that it
applies to single-function hooks rather than normal hooks.
@item :after
Call @var{function} after the old function. Both functions receive the
same arguments, and the return value of the composition is the return value of
the old function. More specifically, the composition of the two functions
behaves like:
@example
(lambda (&rest r) (prog1 (apply @var{oldfun} r) (apply @var{function} r)))
@end example
This is similar to @code{(add-hook @var{hook} @var{function} nil 'append)},
except that it applies to single-function hooks rather than normal hooks.
@item :override
This completely replaces the old function with the new one. The old function
can of course be recovered if you later call @code{remove-function}.
@item :around
Call @var{function} instead of the old function, but provide the old function
as an extra argument to @var{function}. This is the most flexible composition.
For example, it lets you call the old function with different arguments, or
within a let-binding, or you can sometimes delegate the work to the old
function and sometimes override it completely. More specifically, the
composition of the two functions behaves like:
@example
(lambda (&rest r) (apply @var{function} @var{oldfun} r))
@end example
@item :before-while
Call @var{function} before the old function and don't call the old
function if @var{function} returns @code{nil}. Both functions receive the
same arguments, and the return value of the composition is the return value of
the old function. More specifically, the composition of the two functions
behaves like:
@example
(lambda (&rest r) (and (apply @var{function} r) (apply @var{oldfun} r)))
@end example
This is reminiscent of @code{(add-hook @var{hook} @var{function})}, when
@var{hook} is run via @code{run-hook-with-args-until-failure}.
@item :before-until
Call @var{function} before the old function and only call the old function if
@var{function} returns @code{nil}. More specifically, the composition of the
two functions behaves like:
@example
(lambda (&rest r) (or (apply @var{function} r) (apply @var{oldfun} r)))
@end example
This is reminiscent of @code{(add-hook @var{hook} @var{function})}, when
@var{hook} is run via @code{run-hook-with-args-until-success}.
@item :after-while
Call @var{function} after the old function and only if the old function
returned non-@code{nil}. Both functions receive the same arguments, and the
return value of the composition is the return value of @var{function}.
More specifically, the composition of the two functions behaves like:
@example
(lambda (&rest r) (and (apply @var{oldfun} r) (apply @var{function} r)))
@end example
This is reminiscent of @code{(add-hook @var{hook} @var{function} nil 'append)},
when @var{hook} is run via @code{run-hook-with-args-until-failure}.
@item :after-until
Call @var{function} after the old function and only if the old function
returned @code{nil}. More specifically, the composition of the two functions
behaves like:
@example
(lambda (&rest r) (or (apply @var{oldfun} r) (apply @var{function} r)))
@end example
This is reminiscent of @code{(add-hook @var{hook} @var{function} nil 'append)},
when @var{hook} is run via @code{run-hook-with-args-until-success}.
@item :filter-args
Call @var{function} first and use the result (which should be a list) as the
new arguments to pass to the old function. More specifically, the composition
of the two functions behaves like:
@example
(lambda (&rest r) (apply @var{oldfun} (funcall @var{function} r)))
@end example
@item :filter-return
Call the old function first and pass the result to @var{function}.
More specifically, the composition of the two functions behaves like:
@example
(lambda (&rest r) (funcall @var{function} (apply @var{oldfun} r)))
@end example
@end table
When modifying a variable (whose name will usually end with @code{-function}),
you can choose whether @var{function} is used globally or only in the current
buffer: if @var{place} is just a symbol, then @var{function} is added to the
global value of @var{place}. Whereas if @var{place} is of the form
@code{(local @var{symbol})}, where @var{symbol} is an expression which returns
the variable name, then @var{function} will only be added in the
current buffer.
Every function added with @code{add-function} can be accompanied by an
association list of properties @var{props}. Currently only two of those
properties have a special meaning:
@table @code
@item name
This gives a name to the advice, which @code{remove-function} can use to
identify which function to remove. Typically used when @var{function} is an
anonymous function.
@item depth
This specifies where to place the advice, in case several advices are present.
By default, the depth is 0. A depth of 100 indicates that this advice should
be kept as deep as possible, whereas a depth of -100 indicates that it
should stay as the outermost advice. When two advices specify the same depth,
the most recently added advice will be outermost.
@end table
@end defmac
@defmac remove-function place function
This macro removes @var{function} from the function stored in
@var{place}. This only works if @var{function} was added to @var{place}
using @code{add-function}.
@var{function} is compared with functions added to @var{place} using
@code{equal}, to try and make it work also with lambda expressions. It is
additionally compared also with the @code{name} property of the functions added
to @var{place}, which can be more reliable than comparing lambda expressions
using @code{equal}.
@end defmac
@defun advice-function-member-p advice function-def
Return non-@code{nil} if @var{advice} is already in @var{function-def}.
Like for @code{remove-function} above, instead of @var{advice} being the actual
function, it can also be the @code{name} of the piece of advice.
@end defun
@defun advice-function-mapc f function-def
Call the function @var{f} for every advice that was added to
@var{function-def}. @var{f} is called with two arguments: the advice function
and its properties.
@end defun
@node Advising Named Functions
@subsection Advising Named Functions
A common use of advice is for named functions and macros.
Since @var{add-function} does not know how to deal with macros and autoloaded
functions, Emacs provides a separate set of functions to manipulate pieces of
advice applied to named functions.
Advice can be useful for altering the behavior of an existing
function without having to redefine the whole function. However, it
can be a source of bugs, since existing callers to the function may
assume the old behavior, and work incorrectly when the behavior is
changed by advice. Advice can also cause confusion in debugging, if
the person doing the debugging does not notice or remember that the
function has been modified by advice.
For these reasons, advice should be reserved for the cases where you
cannot modify a function's behavior in any other way. If it is
possible to do the same thing via a hook, that is preferable
(@pxref{Hooks}). If you simply want to change what a particular key
does, it may be better to write a new command, and remap the old
command's key bindings to the new one (@pxref{Remapping Commands}).
In particular, Emacs's own source files should not put advice on
functions in Emacs. (There are currently a few exceptions to this
convention, but we aim to correct them.)
Macros can also be advised, in much the same way as functions.
However, special forms (@pxref{Special Forms}) cannot be advised.
It is possible to advise a primitive (@pxref{What Is a Function}),
but one should typically @emph{not} do so, for two reasons. Firstly,
some primitives are used by the advice mechanism, and advising them
could cause an infinite recursion. Secondly, many primitives are
called directly from C, and such calls ignore advice; hence, one ends
up in a confusing situation where some calls (occurring from Lisp
code) obey the advice and other calls (from C code) do not.
@defun advice-add symbol where function &optional props
Add the advice @var{function} to the named function @var{symbol}.
@var{where} and @var{props} have the same meaning as for @code{add-function}
(@pxref{Advising Primitives}).
@end defun
@defun advice-remove symbol function
Remove the advice @var{function} from the named function @var{symbol}.
@var{function} can also be the @code{name} of an advice.
@end defun
@defun advice-member-p function symbol
Return non-@code{nil} if the advice @var{function} is already in the named
function @var{symbol}. @var{function} can also be the @code{name} of
an advice.
@end defun
@defun advice-mapc function symbol
Call @var{function} for every advice that was added to the named function
@var{symbol}. @var{function} is called with two arguments: the advice function
and its properties.
@end defun
@node Obsolete Functions
@section Declaring Functions Obsolete
@cindex obsolete functions
......
......@@ -49,7 +49,6 @@ texinputdir = $(srcdir)\..\..\nt\envadd.bat \
srcs = \
$(emacsdir)/emacsver.texi \
$(srcdir)/abbrevs.texi \
$(srcdir)/advice.texi \
$(srcdir)/anti.texi \
$(srcdir)/backups.texi \
$(srcdir)/buffers.texi \
......
......@@ -69,11 +69,13 @@ functions are called with arguments, or their return values are used
in some way. The hook's documentation says how the functions are
called. You can use @code{add-hook} to add a function to an abnormal
hook, but you must write the function to follow the hook's calling
convention.
convention. By convention, abnormal hook names end in @samp{-functions}.
By convention, abnormal hook names end in @samp{-functions}. If the
variable's name ends in @samp{-function}, then its value is just a single
function, not a list of functions.
@cindex single-function hook
If the variable's name ends in @samp{-function}, then its value is
just a single function, not a list of functions. @code{add-hook} cannot be
used to modify such a @emph{single function hook}, and you have to use
@code{add-function} instead (@pxref{Advising Functions}).
@menu
* Running Hooks:: How to run a hook.
......@@ -129,47 +131,6 @@ non-@code{nil} value, it returns that value; otherwise it returns
@code{nil}.
@end defun
@defmac with-wrapper-hook hook args &rest body
This macro runs the abnormal hook @code{hook} as a series of nested
``wrapper functions'' around the @var{body} forms. The effect is
similar to nested @code{around} advices (@pxref{Around-Advice}).
Each hook function should accept an argument list consisting of a function
@var{fun}, followed by the additional arguments listed in @var{args}.
The first hook function is passed a function @var{fun} that, if it is
called with arguments @var{args}, performs @var{body} (i.e., the default
operation). The @var{fun} passed to each successive hook function is
constructed from all the preceding hook functions (and @var{body}); if
this @var{fun} is called with arguments @var{args}, it does what the
@code{with-wrapper-hook} call would if the preceding hook functions were
the only ones in @var{hook}.
Each hook function may call its @var{fun} argument as many times as it
wishes, including never. In that case, such a hook function acts to
replace the default definition altogether, and any preceding hook
functions. Of course, a subsequent hook function may do the same thing.
Each hook function definition is used to construct the @var{fun} passed
to the next hook function in @var{hook}, if any. The last or
``outermost'' @var{fun} is called once to produce the overall effect.
When might you want to use a wrapper hook? The function
@code{filter-buffer-substring} illustrates a common case. There is a
basic functionality, performed by @var{body}---in this case, to extract
a buffer-substring. Then any number of hook functions can act in
sequence to modify that string, before returning the final result.
A wrapper-hook also allows for a hook function to completely replace the
default definition (by not calling @var{fun}).
@end defmac
@defun run-hook-wrapped hook wrap-function &rest args
This function is similar to @code{run-hook-with-args-until-success}.
Like that function, it runs the functions on the abnormal hook
@code{hook}, stopping at the first one that returns non-@code{nil}.
Instead of calling the hook functions directly, though, it actually
calls @code{wrap-function} with arguments @code{fun} and @code{args}.
@end defun
@node Setting Hooks
@subsection Setting Hooks
......
2014-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
* cl.texi (Function Bindings): Fix incorrect description of cl-let.
2014-01-09 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
* Makefile.in: Add eww.texi.
......@@ -18,8 +22,8 @@
(Advanced configuration)
(Header arguments in Org mode properties): Spelling fixes.
(Special blocks): Add #+BEGIN_ABSTRACT as another example.
(@LaTeX{} specific attributes): New index entries. Use
#+BEGIN_ABSTRACT in the example.
(@LaTeX{} specific attributes): New index entries.
Use #+BEGIN_ABSTRACT in the example.
2013-01-07 Nicolas Goaziou <n.goaziou@gmail.com>
......@@ -80,7 +84,7 @@
2014-01-02 Aidan Gauland <aidalgol@amuri.net>
* eshell.texi (Command Basics): Removed `Command basics' chapter.
* eshell.texi (Command Basics): Remove `Command basics' chapter.
2014-01-02 Aidan Gauland <aidalgol@amuri.net>
......@@ -200,8 +204,8 @@
* org.texi (Orgstruct mode): Fix suggested setting of
`orgstruct-heading-prefix-regexp'.
* org.texi (Export settings): Document
`org-export-allow-bind-keywords'.
* org.texi (Export settings):
Document `org-export-allow-bind-keywords'.
* org.texi (History and Acknowledgments): Small rephrasing.
......@@ -209,8 +213,8 @@
in a year datetree.
* org.texi (Beamer export, @LaTeX{} and PDF export)
(Header and sectioning, @LaTeX{} specific attributes): Enhance
style.
(Header and sectioning, @LaTeX{} specific attributes):
Enhance style.
* org.texi (Agenda commands): Add a footnote about dragging agenda
lines: it does not persist and it does not change the .org files.
......@@ -229,15 +233,15 @@
* org.texi (Other built-in back-ends): New section.
* org.texi (Editing source code): Document
`org-edit-src-auto-save-idle-delay' and
* org.texi (Editing source code):
Document `org-edit-src-auto-save-idle-delay' and
`org-edit-src-turn-on-auto-save'.
* org.texi (External links): Document contributed link types
separately.
* org.texi (Closing items): Document
`org-closed-keep-when-no-todo'.
* org.texi (Closing items):
Document `org-closed-keep-when-no-todo'.
* org.texi (Export back-ends): Rename from "Export formats".
(The Export Dispatcher): Remove reference to
......@@ -273,8 +277,8 @@
(Agenda commands): Move details about filtering commands to
the new section, only include a summary here.
(Customizing tables in ODT export)
(System-wide header arguments, Conflicts, Dynamic blocks): Use
spaces for indentation.
(System-wide header arguments, Conflicts, Dynamic blocks):
Use spaces for indentation.
* org.texi (Emphasis and monospace): Mention `org-emphasis-alist'.
......@@ -331,8 +335,8 @@
(In-buffer settings): Update to reflect changes from the new
export engine.
* org.texi (Matching tags and properties): More examples. Explain
group tags expansion as regular expressions.
* org.texi (Matching tags and properties): More examples.
Explain group tags expansion as regular expressions.
* org.texi (Tag groups): New section.
......@@ -357,8 +361,8 @@
* org.texi (Org syntax): New section.
* org.texi (Orgstruct mode): Document
`orgstruct-heading-prefix-regexp'.
* org.texi (Orgstruct mode):
Document `orgstruct-heading-prefix-regexp'.
* org.texi (Speeding up your agendas): New section.
......@@ -382,8 +386,8 @@
* org.texi: Update the list contributions.
* org.texi (Agenda commands): Exporting the agenda to an .org file
will not copy the subtrees and the inherited tags. Document
`org-agenda-filter-by-regexp'.
will not copy the subtrees and the inherited tags.
Document `org-agenda-filter-by-regexp'.
* org.texi (Publishing action, Complex example): Fix names of
publishing functions.
......@@ -397,8 +401,8 @@
* org.texi (Capture): Mention that org-remember.el is not
supported anymore.
* org.texi (Top, Exporting, Beamer class export): Delete
references to the TaskJuggler export.
* org.texi (Top, Exporting, Beamer class export):
Delete references to the TaskJuggler export.
(History and Acknowledgments): Mention that the TaskJuggler has
been rewritten by Nicolas and now lives in the contrib/ directory
of Org's distribution. Mention that Jambunathan rewrote the HTML
......@@ -415,16 +419,16 @@
(@LaTeX{} and PDF export, Header and sectioning)
(Publishing options): Fix LaTeX options names.
* org.texi (Export options, CSS support, In-buffer settings): Fix
references to HTML_LINK_* and HTML_STYLE keywords.
* org.texi (Export options, CSS support, In-buffer settings):
Fix references to HTML_LINK_* and HTML_STYLE keywords.
* org.texi (Export options, In-buffer settings): Fix references to
#+SELECT_TAGS and #+EXCLUDE_TAGS and remove reference to #+XSLT.
* org.texi (Top, Markup, Initial text, Images and tables)
(@LaTeX{} fragments, @LaTeX{} fragments, Exporting)
(Export options, JavaScript support, Beamer class export): Remove
references to the DocBook export, which has been deleted.
(Export options, JavaScript support, Beamer class export):
Remove references to the DocBook export, which has been deleted.
(History and Acknowledgments): Mention that DocBook has been
deleted, suggest to use the Texinfo exporter instead, then to
convert the .texi to DocBook with makeinfo.
......@@ -433,8 +437,8 @@
* org.texi (Deadlines and scheduling): Add a variable to the
index. Add documentation about delays for scheduled tasks.
* org.texi (Emphasis and monospace): Mention
`org-fontify-emphasized-text' and
* org.texi (Emphasis and monospace):
Mention `org-fontify-emphasized-text' and
`org-emphasis-regexp-components'.
* org.texi (References): Small enhancement.
......@@ -491,7 +495,7 @@
* org.texi (Extracting source code): Mention the prefix argument
to org-babel-tangle.
(noweb): Removed erroneous negative.
(noweb): Remove erroneous negative.
(Specific header arguments): Document new header arguments.
Documentation for new tangle-mode header argument.
(Top): Documentation for new tangle-mode header argument.
......@@ -595,8 +599,8 @@
* org.texi (Header and sectioning): Add a footnote about the
different between LATEX_HEADER_EXTRA and LATEX_HEADER.
* org.texi (The Export Dispatcher): Document
`org-export-in-background'.
* org.texi (The Export Dispatcher):
Document `org-export-in-background'.
* org.texi (Footnotes): Export back-ends do not use
`org-footnote-normalize' anymore.
......@@ -618,19 +622,19 @@
* org.texi (Include files): Remove reference to :prefix1
and :prefix. Give more details for :minlevel.
* org.texi (Macro replacement): Fix macro name. Update
documentation about possible locations and escaping mechanism.
* org.texi (Macro replacement): Fix macro name.
Update documentation about possible locations and escaping mechanism.
* org.texi (Table of contents): Update documentation. Document
lists of listings and lists of tables. Add documentation for
* org.texi (Table of contents): Update documentation.
Document lists of listings and lists of tables. Add documentation for
optional title and #+TOC: keyword.
2013-11-12 Rick Frankel <rick@rickster.com>
* org.texi (results): Add Format section, broken out of Type
section to match code.
(hlines, colnames): Remove incorrect Emacs Lisp exception. Note
that the actual default handling (at least for python and
(hlines, colnames): Remove incorrect Emacs Lisp exception.
Note that the actual default handling (at least for python and
emacs-lisp) does not seem to match the description.
2013-11-12 Sacha Chua <sacha@sachachua.com> (tiny change)
......@@ -640,8 +644,8 @@
2013-11-12 Yasushi Shoji <yashi@atmark-techno.com>
* org.texi (Resolving idle time): Document
`org-clock-x11idle-program-name'.
* org.texi (Resolving idle time):
Document `org-clock-x11idle-program-name'.
2013-10-24 Michael Albinus <michael.albinus@gmx.de>
......@@ -882,8 +886,8 @@
2013-07-29 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Frequently Asked Questions): Mention
`tramp-use-ssh-controlmaster-options'.
* tramp.texi (Frequently Asked Questions):
Mention `tramp-use-ssh-controlmaster-options'.
2013-07-26 Tassilo Horn <tsdh@gnu.org>
......@@ -927,8 +931,8 @@
2013-07-08 Tassilo Horn <tsdh@gnu.org>
* gnus.texi (lines): Correct description of
`gnus-registry-track-extra's default value. Mention
`gnus-registry-remove-extra-data'.
`gnus-registry-track-extra's default value.
Mention `gnus-registry-remove-extra-data'.
2013-07-06 Lars Ingebrigtsen <larsi@gnus.org>
......
......@@ -1282,13 +1282,8 @@ cells of symbols rather than on the value cells. Each @var{binding}
must be a list of the form @samp{(@var{name} @var{arglist}
@var{forms}@dots{})}, which defines a function exactly as if
it were a @code{cl-defun} form. The function @var{name} is defined
accordingly for the duration of the body of the @code{cl-flet}; then
the old function definition, or lack thereof, is restored.
You can use @code{cl-flet} to disable or modify the behavior of
functions (including Emacs primitives) in a temporary, localized fashion.
(Compare this with the idea of advising functions.