emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/edit-indirect 273910a944 11/28: Ensure commit hooks are al


From: ELPA Syncer
Subject: [nongnu] elpa/edit-indirect 273910a944 11/28: Ensure commit hooks are always called with the correct region.
Date: Thu, 7 Jul 2022 11:59:13 -0400 (EDT)

branch: elpa/edit-indirect
commit 273910a944400bb540d66acc16e5767af011afad
Author: Fanael Linithien <fanael4@gmail.com>
Commit: Fanael Linithien <fanael4@gmail.com>

    Ensure commit hooks are always called with the correct region.
---
 edit-indirect.el | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/edit-indirect.el b/edit-indirect.el
index b9c0cbd459..2edb03e9ac 100644
--- a/edit-indirect.el
+++ b/edit-indirect.el
@@ -299,11 +299,33 @@ No error is signaled if `inhibit-read-only' or
         (edit-indirect--inhibit-read-only t))
     (with-current-buffer (overlay-buffer edit-indirect--overlay)
       (save-excursion
-        (run-hook-with-args 'edit-indirect-before-commit-functions beg end)
-        (delete-region beg end)
-        (goto-char beg)
-        (insert-buffer-substring-no-properties buffer 1 (1+ (buffer-size 
buffer)))
-        (run-hook-with-args 'edit-indirect-after-commit-functions beg 
(point))))))
+        (let ((beg-marker (copy-marker beg))
+              (end-marker (copy-marker end)))
+          (edit-indirect--run-hook-with-positions
+           'edit-indirect-before-commit-functions beg-marker end-marker)
+          (delete-region beg-marker end-marker)
+          (goto-char beg-marker)
+          (insert-buffer-substring-no-properties buffer 1 (1+ (buffer-size 
buffer)))
+          (edit-indirect--run-hook-with-positions
+           'edit-indirect-after-commit-functions beg-marker (point))
+          (set-marker beg-marker nil)
+          (set-marker end-marker nil))))))
+
+(defun edit-indirect--run-hook-with-positions (hook beg end)
+  "Run HOOK with the specified positions BEG and END.
+HOOK should be a symbol, a hook variable.
+The functions are passed integer positions.
+If a function changes the buffer contents, the next function will be
+called with updated positions."
+  (let ((beg-marker (unless (markerp beg) (copy-marker beg)))
+        (end-marker (unless (markerp end) (copy-marker end))))
+    (run-hook-wrapped hook
+                      (lambda (f beg end)
+                        (funcall f (marker-position beg) (marker-position end))
+                        nil)
+                      (or beg-marker beg) (or end-marker end))
+    (when beg-marker (set-marker beg-marker nil))
+    (when end-marker (set-marker end-marker nil))))
 
 (defun edit-indirect--abort ()
   "Abort indirect edit."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]