]> git.eshelyaron.com Git - emacs.git/commitdiff
Apply text edits atomically
authorJoão Távora <joaotavora@gmail.com>
Thu, 21 Jun 2018 13:53:50 +0000 (14:53 +0100)
committerJoão Távora <joaotavora@gmail.com>
Thu, 21 Jun 2018 13:53:50 +0000 (14:53 +0100)
As suggested by mkcms <k.michal@zoho.com>, but do it in
eglot--apply-text-edits, where it benefits all its users.

* eglot.el (eglot--apply-text-edits): Use atomic-change-group.

GitHub-reference: per https://github.com/joaotavora/eglot/issues/22

lisp/progmodes/eglot.el

index e96a3e68e23d91f7272b642bf73e14c867575fd4..489e3658b1147eb6c4880dcb4da59bb05d618e97 100644 (file)
@@ -1583,17 +1583,18 @@ If SKIP-SIGNATURE, don't try to send textDocument/signatureHelp."
   (unless (or (not version) (equal version eglot--versioned-identifier))
     (eglot--error "Edits on `%s' require version %d, you have %d"
                   (current-buffer) version eglot--versioned-identifier))
-  (mapc (pcase-lambda (`(,newText ,beg . ,end))
-          (save-restriction
-            (narrow-to-region beg end)
-            (let ((source (current-buffer)))
-              (with-temp-buffer
-                (insert newText)
-                (let ((temp (current-buffer)))
-                  (with-current-buffer source (replace-buffer-contents temp)))))))
-        (mapcar (eglot--lambda (&key range newText)
-                  (cons newText (eglot--range-region range 'markers)))
-                edits))
+  (atomic-change-group
+    (mapc (pcase-lambda (`(,newText ,beg . ,end))
+            (save-restriction
+              (narrow-to-region beg end)
+              (let ((source (current-buffer)))
+                (with-temp-buffer
+                  (insert newText)
+                  (let ((temp (current-buffer)))
+                    (with-current-buffer source (replace-buffer-contents temp)))))))
+          (mapcar (eglot--lambda (&key range newText)
+                    (cons newText (eglot--range-region range 'markers)))
+                  edits)))
   (eglot--message "%s: Performed %s edits" (current-buffer) (length edits)))
 
 (defun eglot--apply-workspace-edit (wedit &optional confirm)