]> git.eshelyaron.com Git - emacs.git/commitdiff
*** empty log message ***
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Aug 2007 20:46:34 +0000 (20:46 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Aug 2007 20:46:34 +0000 (20:46 +0000)
etc/NEWS
lispref/text.texi

index 3022ad99d306ea8e048bf150137411d71a8e91eb..f0e00c99ebac992c97e2065fa30791acd6b28cfb 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -175,6 +175,11 @@ supported on other platforms, but not on Windows due to using the winsock
 \f
 * Lisp Changes in Emacs 23.1
 
++++
+** inhibit-modification-hooks is bound to t while running modification hooks.
+As a happy consequence, after-change-functions and before-change-functions
+are not bound to nil any more while running an (after|before)-change-function.
+
 ** Non-breaking space now acts as whitespace.
 
 +++
index b3cd6cb4a929aea8d64d6a03694eade1df88bdae..430c48133eee420aae78e4ea3b8616aa6bd94422 100644 (file)
@@ -4278,35 +4278,6 @@ because it may lead to inefficient behavior for some change hook
 functions.
 @end defmac
 
-The two variables above are temporarily bound to @code{nil} during the
-time that any of these functions is running.  This means that if one of
-these functions changes the buffer, that change won't run these
-functions.  If you do want a hook function to make changes that run
-these functions, make it bind these variables back to their usual
-values.
-
-One inconvenient result of this protective feature is that you cannot
-have a function in @code{after-change-functions} or
-@code{before-change-functions} which changes the value of that variable.
-But that's not a real limitation.  If you want those functions to change
-the list of functions to run, simply add one fixed function to the hook,
-and code that function to look in another variable for other functions
-to call.  Here is an example:
-
-@example
-(setq my-own-after-change-functions nil)
-(defun indirect-after-change-function (beg end len)
-  (let ((list my-own-after-change-functions))
-    (while list
-      (funcall (car list) beg end len)
-      (setq list (cdr list)))))
-
-@group
-(add-hooks 'after-change-functions
-           'indirect-after-change-function)
-@end group
-@end example
-
 @defvar first-change-hook
 This variable is a normal hook that is run whenever a buffer is changed
 that was previously in the unmodified state.
@@ -4318,6 +4289,13 @@ disabled; none of them run.  This affects all the hook variables
 described above in this section, as well as the hooks attached to
 certain special text properties (@pxref{Special Properties}) and overlay
 properties (@pxref{Overlay Properties}).
+
+Also, this variable is bound to non-@code{nil} while running those
+same hook variables, so that by default modifying the buffer from
+a modification hook does not cause other modification hooks to be run.
+If you do want modification hooks to be run in a particular piece of
+code that is itself run from a modification hook, then rebind locally
+@code{inhibit-modification-hooks} to @code{nil}.
 @end defvar
 
 @ignore