From 468c2aebae0ee13273f4b06e92f4188c4c46d2b3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 28 Mar 2025 00:48:28 -0400 Subject: [PATCH] Replace uses of `replace-buffer-contents` * lisp/vc/vc.el (vc-diff-restore-buffer): * lisp/progmodes/python.el (python--do-isort): * lisp/progmodes/eglot.el (eglot--apply-text-edits): * lisp/files.el (revert-buffer-insert-file-contents-delicately): * lisp/json.el (json-pretty-print): Use `replace-region-contents`. --- lisp/files.el | 11 ++++++----- lisp/json.el | 20 +++++++++----------- lisp/progmodes/eglot.el | 25 ++++++++++++++----------- lisp/progmodes/python.el | 2 +- lisp/vc/vc.el | 2 +- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index 3ce5d6264dc..eb49f25ee27 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -7264,9 +7264,9 @@ an auto-save file." The command tries to preserve markers, properties and overlays. If the operation takes more than this time, a single delete+insert is performed. Actually, this value is passed as -the MAX-SECS argument to the function `replace-buffer-contents', +the MAX-SECS argument to the function `replace-region-contents', so it is not ensured that the whole execution won't take longer. -See `replace-buffer-contents' for more details.") +See `replace-region-contents' for more details.") (defun revert-buffer-insert-file-contents-delicately (file-name _auto-save-p) "Optional function for `revert-buffer-insert-file-contents-function'. @@ -7275,11 +7275,11 @@ The function `revert-buffer-with-fine-grain' uses this function by binding As with `revert-buffer-insert-file-contents--default-function', FILE-NAME is the name of the file and AUTO-SAVE-P is non-nil if this is an auto-save file. -Since calling `replace-buffer-contents' can take a long time, depending of +Since calling `replace-region-contents' can take a long time, depending of the number of changes made to the buffer, it uses the value of the variable `revert-buffer-with-fine-grain-max-seconds' as a maximum time to try delicately reverting the buffer. If it fails, it does a delete+insert. For more details, -see `replace-buffer-contents'." +see `replace-region-contents'." (cond ((not (file-exists-p file-name)) (error (if buffer-file-number @@ -7302,7 +7302,8 @@ see `replace-buffer-contents'." (let ((temp-buf (current-buffer))) (set-buffer buf) (let ((buffer-file-name nil)) - (replace-buffer-contents + (replace-region-contents + (point-min) (point-max) temp-buf revert-buffer-with-fine-grain-max-seconds)))))))) ;; See comments in revert-buffer-with-fine-grain for an explanation. diff --git a/lisp/json.el b/lisp/json.el index 6e62e594910..098bf43cd99 100644 --- a/lisp/json.el +++ b/lisp/json.el @@ -803,7 +803,7 @@ With prefix argument MINIMIZE, minimize it instead." (orig-buf (current-buffer))) ;; Strategy: Repeatedly `json-read' from the original buffer and ;; write the pretty-printed snippet to a temporary buffer. - ;; Use `replace-buffer-contents' to swap the original + ;; Use `replace-region-contents' to swap the original ;; region with the contents of the temporary buffer so that point, ;; marks, etc. are kept. ;; Stop as soon as we get an error from `json-read'. @@ -825,16 +825,14 @@ With prefix argument MINIMIZE, minimize it instead." (standard-output tmp-buf)) (with-current-buffer tmp-buf (erase-buffer) (json--print json)) - (save-restriction - (narrow-to-region beg (point)) - (replace-buffer-contents - tmp-buf - json-pretty-print-max-secs - ;; FIXME: What's a good value here? Can we use - ;; something better, e.g., by deriving a value - ;; from the size of the region? - 64) - 'keep-going)) + (replace-region-contents + beg (point) tmp-buf + json-pretty-print-max-secs + ;; FIXME: What's a good value here? Can we use + ;; something better, e.g., by deriving a value + ;; from the size of the region? + 64) + 'keep-going) ;; EOF is expected because we json-read until we hit ;; the end of the narrow region. (json-end-of-file nil)))))))))) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 4c1c7536b0d..c937283122e 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -3839,17 +3839,20 @@ If SILENT, don't echo progress in mode-line." 0 howmany))) (done 0)) (mapc (pcase-lambda (`(,newText ,beg . ,end)) - (let ((source (current-buffer))) - (with-temp-buffer - (insert newText) - (let ((temp (current-buffer))) - (with-current-buffer source - (save-excursion - (save-restriction - (narrow-to-region beg end) - (replace-buffer-contents temp))) - (when reporter - (eglot--reporter-update reporter (cl-incf done)))))))) + (if (> emacs-major-version 30) + (replace-region-contents beg end newText) + (let ((source (current-buffer))) + (with-temp-buffer + (insert newText) + (let ((temp (current-buffer))) + (with-current-buffer source + (save-excursion + (save-restriction + (narrow-to-region beg end) + (with-no-warnings + (replace-buffer-contents temp))))))))) + (when reporter + (eglot--reporter-update reporter (cl-incf done)))) (mapcar (lambda (edit) (eglot--dcase edit (((TextEdit) range newText) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b6db6097d9f..de3745a036c 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -6931,7 +6931,7 @@ Return non-nil if the buffer was actually modified." (unless (eq 0 status) (error "%s exited with status %s (maybe isort is missing?)" python-interpreter status)) - (replace-buffer-contents temp) + (replace-region-contents (point-min) (point-max) temp) (not (eq tick (buffer-chars-modified-tick))))))))) ;;;###autoload diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 565eaabff0b..5c401f0bded 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1970,7 +1970,7 @@ of NEW (without destroying existing markers), swapping their text objects, and finally killing buffer ORIGINAL." (with-current-buffer original (let ((inhibit-read-only t)) - (replace-buffer-contents new))) + (replace-region-contents (point-min) (point-max) new))) (with-current-buffer new (buffer-swap-text original)) (kill-buffer original))