(with-silent-modifications): New macro.
This commit is contained in:
parent
3b814ebcdb
commit
83a5aac556
3 changed files with 29 additions and 0 deletions
2
etc/NEWS
2
etc/NEWS
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
23
lisp/subr.el
23
lisp/subr.el
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue