Merge pull request #412 from npostavs/less-narrow

Wait till after content insertion to narrow
This commit is contained in:
João Távora 2013-10-14 09:28:42 -07:00
commit 6c3e0294dd
2 changed files with 38 additions and 31 deletions

View File

@ -213,6 +213,15 @@
(yas-expand-snippet snippet) (yas-expand-snippet snippet)
(should (string= (yas--buffer-contents) "#include <foo>\nmain"))))) (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 () (ert-deftest another-example-for-issue-271 ()
;; expect this to fail in batch mode since `region-active-p' doesn't ;; 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. ;; used by `yas-expand-snippet' doesn't make sense in that context.

View File

@ -3509,24 +3509,20 @@ considered when expanding the snippet."
;; plain text will get recorded at the end. ;; plain text will get recorded at the end.
;; ;;
;; stacked expansion: also shoosh the overlay modification hooks ;; stacked expansion: also shoosh the overlay modification hooks
(save-restriction (let ((buffer-undo-list t))
(narrow-to-region start start) ;; snippet creation might evaluate users elisp, which
(let ((buffer-undo-list t)) ;; might generate errors, so we have to be ready to catch
;; snippet creation might evaluate users elisp, which ;; them mostly to make the undo information
;; 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 yas--start-column (save-restriction (widen) (current-column))) (setq snippet
(yas--inhibit-overlay-hooks (if expand-env
(setq snippet (eval `(let* ,expand-env
(if expand-env (insert content)
(eval `(let* ,expand-env (yas--snippet-create start (point))))
(let ((inhibit-modification-hooks t)) (insert content)
(insert content)) (yas--snippet-create start (point))))))
(yas--snippet-create (point-min))))
(let ((inhibit-modification-hooks t))
(insert content))
(yas--snippet-create (point-min)))))))
;; stacked-expansion: This checks for stacked expansion, save the ;; stacked-expansion: This checks for stacked expansion, save the
;; `yas--previous-active-field' and advance its boundary. ;; `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) (push `(apply yas--take-care-of-redo ,beg ,end ,snippet)
buffer-undo-list)))) buffer-undo-list))))
(defun yas--snippet-create (begin) (defun yas--snippet-create (begin end)
"Create a snippet from a template inserted at BEGIN. "Create a snippet from a template inserted at BEGIN to END.
Returns the newly created snippet." Returns the newly created snippet."
(let ((snippet (yas--make-snippet))) (save-restriction
(goto-char begin) (narrow-to-region begin end)
(yas--snippet-parse-create snippet) (let ((snippet (yas--make-snippet)))
(goto-char begin)
(yas--snippet-parse-create snippet)
;; Sort and link each field ;; Sort and link each field
(yas--snippet-sort-fields snippet) (yas--snippet-sort-fields snippet)
;; Create keymap overlay for snippet ;; Create keymap overlay for snippet
(setf (yas--snippet-control-overlay snippet) (setf (yas--snippet-control-overlay snippet)
(yas--make-control-overlay snippet (point-min) (point-max))) (yas--make-control-overlay snippet (point-min) (point-max)))
;; Move to end ;; Move to end
(goto-char (point-max)) (goto-char (point-max))
snippet)) snippet)))
;;; Apropos adjacencies and "fom's": ;;; Apropos adjacencies and "fom's":