branch: master
commit 6c3e0294dd9ae738e9ae08ba27351f7e301029e3
Merge: 3bb1515 5c76a0f
Author: João Távora <[email protected]>
Commit: João Távora <[email protected]>
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":