Mercurial > emacs
changeset 104880:02bf3383a22f
(with-silent-modifications): New macro.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 08 Sep 2009 19:42:21 +0000 |
parents | eccd5fb371c2 |
children | 98356e8ba345 |
files | etc/NEWS lisp/ChangeLog lisp/subr.el |
diffstat | 3 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/NEWS Mon Sep 07 15:25:38 2009 +0000 +++ b/etc/NEWS Tue Sep 08 19:42:21 2009 +0000 @@ -200,6 +200,8 @@ * Lisp changes in Emacs 23.2 +** New macro with-silent-modifications to tweak text properties without +affecting the buffer's modification state. ** All the default-FOO variables that hold the default value of the FOO variable, are now declared obsolete.
--- a/lisp/ChangeLog Mon Sep 07 15:25:38 2009 +0000 +++ b/lisp/ChangeLog Tue Sep 08 19:42:21 2009 +0000 @@ -1,3 +1,7 @@ +2009-09-08 Stefan Monnier <monnier@iro.umontreal.ca> + + * subr.el (with-silent-modifications): New macro. + 2009-09-07 Juanma Barranquero <lekktu@gmail.com> * files.el (top-level): Require `cl' when compiling.
--- a/lisp/subr.el Mon Sep 07 15:25:38 2009 +0000 +++ b/lisp/subr.el Tue Sep 08 19:42:21 2009 +0000 @@ -2749,6 +2749,29 @@ (and (buffer-name ,temp-buffer) (kill-buffer ,temp-buffer))))))) +(defmacro with-silent-modifications (&rest body) + "Execute BODY, pretending it does not modifies the buffer. +If BODY performs real modifications to the buffer's text, other +than cosmetic ones, undo data may become corrupted. +Typically used around modifications of text-properties which do not really +affect the buffer's content." + (declare (debug t) (indent 0)) + (let ((modified (make-symbol "modified"))) + `(let* ((,modified (buffer-modified-p)) + (buffer-undo-list t) + (inhibit-read-only t) + (inhibit-modification-hooks t) + deactivate-mark + ;; Avoid setting and removing file locks and checking + ;; buffer's uptodate-ness w.r.t the underlying file. + buffer-file-name + buffer-file-truename) + (unwind-protect + (progn + ,@body) + (unless ,modified + (restore-buffer-modified-p nil)))))) + (defmacro with-output-to-string (&rest body) "Execute BODY, return the text it sent to `standard-output', as a string." (declare (indent 0) (debug t))