summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/subr-x.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2022-05-03 15:35:47 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2022-05-03 15:35:47 -0400
commitb5db5a64435b86de6e5277d1d173c57784783e5e (patch)
tree10916f81c997ea3c580a36a65297cfb357b68907 /lisp/emacs-lisp/subr-x.el
parent8a7db868cc28f933bc2fb2739d122ed11c9ec872 (diff)
downloademacs-b5db5a64435b86de6e5277d1d173c57784783e5e.tar.gz
with-buffer-unmodified-if-unchanged: Tweak the implementation
* lisp/emacs-lisp/subr-x.el (with-buffer-unmodified-if-unchanged): Skip the hash if the buffer was not modified at all. Use `restore-buffer-modified-p`. Also mention that it's imperative that the current buffer is preserved.
Diffstat (limited to 'lisp/emacs-lisp/subr-x.el')
-rw-r--r--lisp/emacs-lisp/subr-x.el8
1 files changed, 5 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el
index afa0423d90e..8e763b613ee 100644
--- a/lisp/emacs-lisp/subr-x.el
+++ b/lisp/emacs-lisp/subr-x.el
@@ -426,7 +426,9 @@ modification status:
(with-buffer-unmodified-if-unchanged
(insert \"a\")
- (delete-char -1))"
+ (delete-char -1))
+
+BODY must preserve the current buffer."
(declare (debug t) (indent 0))
(let ((hash (gensym)))
`(let ((,hash (and (not (buffer-modified-p))
@@ -437,9 +439,9 @@ modification status:
;; If we didn't change anything in the buffer (and the buffer
;; was previously unmodified), then flip the modification status
;; back to "unchanged".
- (when (and ,hash
+ (when (and ,hash (buffer-modified-p)
(equal ,hash (buffer-hash)))
- (set-buffer-modified-p nil))))))
+ (restore-buffer-modified-p nil))))))
(provide 'subr-x)