branch: externals/tempel
commit 66a94544dce96914f75aee4bffe049b79c7843de
Author: Daniel Mendler <m...@daniel-mendler.de>
Commit: Daniel Mendler <m...@daniel-mendler.de>

    Fix recursion issue (Fix #104)
---
 tempel.el | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/tempel.el b/tempel.el
index 0f7115d391..ac8eaeb55b 100644
--- a/tempel.el
+++ b/tempel.el
@@ -216,7 +216,8 @@ REGION are the current region bounds."
 (defun tempel--range-modified (ov &rest _)
   "Range overlay OV modified."
   (when (and (not tempel--inhibit-hooks) (= (overlay-start ov) (overlay-end 
ov)))
-    (let (inhibit-modification-hooks)
+    (let ((inhibit-modification-hooks nil)
+          (tempel--inhibit-hooks t))
       (tempel--disable (overlay-get ov 'tempel--range)))))
 
 (defun tempel--field-modified (ov after beg end &optional _len)
@@ -224,7 +225,8 @@ REGION are the current region bounds."
 AFTER is non-nil after the modification.
 BEG and END are the boundaries of the modification."
   (unless tempel--inhibit-hooks
-    (let (inhibit-modification-hooks)
+    (let ((inhibit-modification-hooks nil)
+          (tempel--inhibit-hooks t))
       (cond
        ;; Erase default before modification if at beginning or end
        ((and (not after) (overlay-get ov 'tempel--default)
@@ -253,22 +255,22 @@ BEG and END are the boundaries of the modification."
           (let (x)
             (setq x (or (and (setq x (overlay-get ov 'tempel--form)) (eval x 
(cdr st)))
                         (and (setq x (overlay-get ov 'tempel--name)) 
(alist-get x (cdr st)))))
-            (when x (tempel--replace (overlay-start ov) (overlay-end ov) ov 
x)))))
+            (when x (tempel--synchronize-replace (overlay-start ov) 
(overlay-end ov) ov x)))))
       ;; Move range overlay
       (move-overlay range (overlay-start range)
                     (max (overlay-end range) (overlay-end ov))))))
 
-(defun tempel--replace (beg end ov str)
+(defun tempel--synchronize-replace (beg end ov str)
   "Replace region between BEG and END with STR.
 If OV is alive, move it."
   (let ((old (buffer-substring-no-properties beg end)))
     (setq ov (and ov (overlay-buffer ov) ov))
     (unless (equal str old)
       (unless (eq buffer-undo-list t)
-        (push (list 'apply #'tempel--replace beg (+ beg (length str)) ov old)
+        (push (list 'apply #'tempel--synchronize-replace
+                    beg (+ beg (length str)) ov old)
               buffer-undo-list))
-      (let ((buffer-undo-list t)
-            (tempel--inhibit-hooks t))
+      (let ((buffer-undo-list t))
         (save-excursion
           (goto-char beg)
           (delete-char (- end beg))

Reply via email to