(with-silent-modifications): New macro.

This commit is contained in:
Stefan Monnier 2009-09-08 19:42:21 +00:00
parent 3b814ebcdb
commit 83a5aac556
3 changed files with 29 additions and 0 deletions

View file

@ -200,6 +200,8 @@ functions and variables.
* 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.

View file

@ -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.

View file

@ -2749,6 +2749,29 @@ See also `with-temp-file' and `with-output-to-string'."
(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))