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

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

[elpa] master 6c3e029 020/177: Merge pull request #412 from npostavs/les


From: João Távora
Subject: [elpa] master 6c3e029 020/177: Merge pull request #412 from npostavs/less-narrow
Date: Sat, 28 Mar 2015 15:40:32 +0000

branch: master
commit 6c3e0294dd9ae738e9ae08ba27351f7e301029e3
Merge: 3bb1515 5c76a0f
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Merge pull request #412 from npostavs/less-narrow
    
    Wait till after content insertion to narrow
---
 yasnippet-tests.el |    9 +++++++
 yasnippet.el       |   60 +++++++++++++++++++++++++--------------------------
 2 files changed, 38 insertions(+), 31 deletions(-)

diff --git a/yasnippet-tests.el b/yasnippet-tests.el
index c5d8738..fd75063 100644
--- a/yasnippet-tests.el
+++ b/yasnippet-tests.el
@@ -213,6 +213,15 @@
       (yas-expand-snippet snippet)
       (should (string= (yas--buffer-contents) "#include <foo>\nmain")))))
 
+(ert-deftest middle-of-buffer-snippet-insertion ()
+  (with-temp-buffer
+    (yas-minor-mode 1)
+    (insert "beginning")
+    (save-excursion (insert "end"))
+    (let ((snippet "-middle-"))
+      (yas-expand-snippet snippet))
+    (should (string= (yas--buffer-contents) "beginning-middle-end"))))
+
 (ert-deftest another-example-for-issue-271 ()
   ;; expect this to fail in batch mode since `region-active-p' doesn't
   ;; used by `yas-expand-snippet' doesn't make sense in that context.
diff --git a/yasnippet.el b/yasnippet.el
index afa0a42..91aabd9 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -3509,24 +3509,20 @@ considered when expanding the snippet."
            ;;    plain text will get recorded at the end.
            ;;
            ;;    stacked expansion: also shoosh the overlay modification hooks
-           (save-restriction
-             (narrow-to-region start start)
-             (let ((buffer-undo-list t))
-               ;; snippet creation might evaluate users elisp, which
-               ;; might generate errors, so we have to be ready to catch
-               ;; them mostly to make the undo information
-               ;;
-               (setq yas--start-column (save-restriction (widen) 
(current-column)))
-               (yas--inhibit-overlay-hooks
-                 (setq snippet
-                       (if expand-env
-                           (eval `(let* ,expand-env
-                                    (let ((inhibit-modification-hooks t))
-                                      (insert content))
-                                    (yas--snippet-create (point-min))))
-                         (let ((inhibit-modification-hooks t))
-                           (insert content))
-                         (yas--snippet-create (point-min)))))))
+           (let ((buffer-undo-list t))
+             ;; snippet creation might evaluate users elisp, which
+             ;; might generate errors, so we have to be ready to catch
+             ;; them mostly to make the undo information
+             ;;
+             (setq yas--start-column (current-column))
+             (yas--inhibit-overlay-hooks
+               (setq snippet
+                     (if expand-env
+                         (eval `(let* ,expand-env
+                                  (insert content)
+                                  (yas--snippet-create start (point))))
+                       (insert content)
+                       (yas--snippet-create start (point))))))
 
            ;; stacked-expansion: This checks for stacked expansion, save the
            ;; `yas--previous-active-field' and advance its boundary.
@@ -3604,25 +3600,27 @@ After revival, push the `yas--take-care-of-redo' in the
       (push `(apply yas--take-care-of-redo ,beg ,end ,snippet)
             buffer-undo-list))))
 
-(defun yas--snippet-create (begin)
-  "Create a snippet from a template inserted at BEGIN.
+(defun yas--snippet-create (begin end)
+  "Create a snippet from a template inserted at BEGIN to END.
 
 Returns the newly created snippet."
-  (let ((snippet (yas--make-snippet)))
-    (goto-char begin)
-    (yas--snippet-parse-create snippet)
+  (save-restriction
+    (narrow-to-region begin end)
+    (let ((snippet (yas--make-snippet)))
+      (goto-char begin)
+      (yas--snippet-parse-create snippet)
 
-    ;; Sort and link each field
-    (yas--snippet-sort-fields snippet)
+      ;; Sort and link each field
+      (yas--snippet-sort-fields snippet)
 
-    ;; Create keymap overlay for snippet
-    (setf (yas--snippet-control-overlay snippet)
-          (yas--make-control-overlay snippet (point-min) (point-max)))
+      ;; Create keymap overlay for snippet
+      (setf (yas--snippet-control-overlay snippet)
+            (yas--make-control-overlay snippet (point-min) (point-max)))
 
-    ;; Move to end
-    (goto-char (point-max))
+      ;; Move to end
+      (goto-char (point-max))
 
-    snippet))
+      snippet)))
 
 
 ;;; Apropos adjacencies and "fom's":



reply via email to

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