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

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

[elpa] master e200a3b 08/51: Let snippet insertion trigger active field


From: Noam Postavsky
Subject: [elpa] master e200a3b 08/51: Let snippet insertion trigger active field clearing.
Date: Sun, 13 May 2018 13:11:40 -0400 (EDT)

branch: master
commit e200a3b9b18a2d7bbd4773bd4ef001dc6f69f0e8
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Let snippet insertion trigger active field clearing.
    
    * yasnippet.el (yas-expand-snippet): Since the actual insertion must
    happen with modification hooks inhibited, we can't rely on that
    mechanism to clear the field.  Call yas--skip-and-clear-field-p on the
    active field.
---
 yasnippet.el | 42 ++++++++++++++++++++++++------------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/yasnippet.el b/yasnippet.el
index 1afb0b3..f351de2 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -3760,30 +3760,36 @@ considered when expanding the snippet."
              "[yas] `yas-expand-snippet' needs properly setup 
`yas-minor-mode'")
   (run-hooks 'yas-before-expand-snippet-hook)
 
-  ;;
-  (let* ((yas-selected-text (or yas-selected-text
-                                (and (region-active-p)
-                                     (buffer-substring-no-properties 
(region-beginning)
-                                                                     
(region-end)))))
-         (start (or start
-                    (and (region-active-p)
-                         (region-beginning))
-                    (point)))
-         (end (or end
-                  (and (region-active-p)
-                       (region-end))
-                  (point)))
-         (to-delete (and start
-                         end
+  (let* ((clear-field
+          (let ((field (and yas--active-field-overlay
+                            (overlay-buffer yas--active-field-overlay)
+                            (overlay-get yas--active-field-overlay 
'yas--field))))
+            (and field (yas--skip-and-clear-field-p
+                        field (point) (point) 0)
+                 field)))
+         (start (cond (start)
+                      ((region-active-p)
+                       (region-beginning))
+                      (clear-field
+                       (yas--field-start clear-field))
+                      (t (point))))
+         (end (cond (end)
+                    ((region-active-p)
+                     (region-end))
+                    (clear-field
+                     (yas--field-end clear-field))
+                    (t (point))))
+         (to-delete (and (> end start)
                          (buffer-substring-no-properties start end)))
+         (yas-selected-text
+          (or yas-selected-text
+              (if (not clear-field) to-delete)))
          (yas--first-indent-undo nil)
          snippet)
     (goto-char start)
     (setq yas--indent-original-column (current-column))
     ;; Delete the region to delete, this *does* get undo-recorded.
-    ;;
-    (when (and to-delete
-               (> end start))
+    (when to-delete
       (delete-region start end))
 
     (cond ((listp content)



reply via email to

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