[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master eeb05f0 10/42: Handle field adjust of pending active field
From: |
Noam Postavsky |
Subject: |
[elpa] master eeb05f0 10/42: Handle field adjust of pending active fields |
Date: |
Sun, 22 Dec 2019 17:37:57 -0500 (EST) |
branch: master
commit eeb05f0910c13320738b21dfbe3b24af94f357cb
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>
Handle field adjust of pending active fields
* yasnippet.el (yas--on-field-overlay-modification): Call
yas--advance-end-maybe on all pending active snippets in case of
stacked expansion.
(yas-next-field): Get current snippet according to
active field bounds.
* yasnippet-tests.el (nested-snippet-expansion-4): New test.
---
yasnippet-tests.el | 20 ++++++++++++++++++++
yasnippet.el | 15 ++++++++++++---
2 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/yasnippet-tests.el b/yasnippet-tests.el
index f96bf4c..95606f2 100644
--- a/yasnippet-tests.el
+++ b/yasnippet-tests.el
@@ -1066,6 +1066,26 @@ hello ${1:$(when (stringp yas-text) (funcall func
yas-text))} foo${1:$$(concat \
(ert-simulate-command '(yas-next-field-or-maybe-expand))
(should (string= (buffer-string) "\\sqrt[3]{\\sqrt[5]{2}}")))))
+(ert-deftest nested-snippet-expansion-4 ()
+ "See Github #959."
+ (let ((yas-triggers-in-field t))
+ (yas-with-snippet-dirs
+ '((".emacs.d/snippets"
+ ("text-mode"
+ ("ch" . "<-${1:ch}"))))
+ (yas-reload-all)
+ (text-mode)
+ (yas-minor-mode +1)
+ (yas-expand-snippet "ch$0\n")
+ (ert-simulate-command '(yas-expand))
+ (ert-simulate-command '(forward-char 2))
+ (ert-simulate-command '(yas-expand))
+ (yas-mock-insert "abc")
+ (ert-simulate-command '(yas-next-field-or-maybe-expand))
+ (yas-mock-insert "def")
+ (ert-simulate-command '(yas-next-field-or-maybe-expand))
+ (should (string= (buffer-string) "<-<-abcdef\n")))))
+
;;; Loading
;;;
diff --git a/yasnippet.el b/yasnippet.el
index 5fa72c3..215a7c3 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -3326,8 +3326,9 @@ Otherwise delegate to `yas-next-field'."
If there's none, exit the snippet."
(interactive)
(unless arg (setq arg 1))
- (let* ((snippet (car (yas-active-snippets)))
- (active-field (overlay-get yas--active-field-overlay 'yas--field))
+ (let* ((active-field (overlay-get yas--active-field-overlay 'yas--field))
+ (snippet (car (yas-active-snippets (yas--field-start active-field)
+ (yas--field-end active-field))))
(target-field (yas--find-next-field arg snippet active-field)))
(yas--letenv (yas--snippet-expand-env snippet)
;; Apply transform to active field.
@@ -3745,7 +3746,15 @@ field start. This hook does nothing if an undo is in
progress."
;; We delete text starting from the END of insertion.
(yas--skip-and-clear field end))
(setf (yas--field-modified-p field) t)
- (yas--advance-end-maybe field (overlay-end overlay))
+ ;; Adjust any pending active fields in case of stacked
+ ;; expansion.
+ (let ((pfield field)
+ (psnippets (yas-active-snippets beg end)))
+ (while (and pfield psnippets)
+ (let ((psnippet (pop psnippets)))
+ (cl-assert (memq pfield (yas--snippet-fields psnippet)))
+ (yas--advance-end-maybe pfield (overlay-end overlay))
+ (setq pfield (yas--snippet-previous-active-field
psnippet)))))
(save-excursion
(yas--field-update-display field))
(yas--update-mirrors snippet)))
- [elpa] master updated (2604824 -> 32f3512), Noam Postavsky, 2019/12/22
- [elpa] master 4af3354 02/42: Make less garbage in overlay heavy buffers, Noam Postavsky, 2019/12/22
- [elpa] master e67592c 03/42: Don't use overlays to find active snippets, Noam Postavsky, 2019/12/22
- [elpa] master 79b90c9 04/42: Remove compatibility code for Emacs 22 and earlier, Noam Postavsky, 2019/12/22
- [elpa] master d3bb879 05/42: Remove last-buffer-undo-list compat definition, Noam Postavsky, 2019/12/22
- [elpa] master 4f78d03 01/42: Close #937: Officially support automatically moving to next field, Noam Postavsky, 2019/12/22
- [elpa] master 1e71360 06/42: Per #947: fix typo in README.md, Noam Postavsky, 2019/12/22
- [elpa] master 7a178a2 07/42: Remove spurious change of before-change-functions, Noam Postavsky, 2019/12/22
- [elpa] master 8328c38 08/42: Fix another failure of cc-mode indentation, Noam Postavsky, 2019/12/22
- [elpa] master eeb05f0 10/42: Handle field adjust of pending active fields,
Noam Postavsky <=
- [elpa] master 8452227 13/42: Consider fundamental-mode as ultimate ancestor, Noam Postavsky, 2019/12/22
- [elpa] master fb253ac 15/42: New public function yas-maybe-expand-abbrev-key-filter, Noam Postavsky, 2019/12/22
- [elpa] master bceb65b 16/42: Make backspace/DEL clear field (#957), Noam Postavsky, 2019/12/22
- [elpa] master 3c0be40 11/42: Update FAQ, Noam Postavsky, 2019/12/22
- [elpa] master 8b25d62 20/42: * doc/snippet-development.org: Fix typos., Noam Postavsky, 2019/12/22
- [elpa] master 7612bc1 24/42: Don't check this-command in yas-not-string-or-comment-condition, Noam Postavsky, 2019/12/22
- [elpa] master dabc719 21/42: Don't turn on yas-minor-mode in temp buffers, Noam Postavsky, 2019/12/22
- [elpa] master fc33b2f 28/42: Make overlay-modification protection optional, Noam Postavsky, 2019/12/22
- [elpa] master 048d030 22/42: Fix line-relative snapshotting for org src blocks, Noam Postavsky, 2019/12/22
- [elpa] master bae20af 27/42: ; * doc/faq.org: Linkify bug reference., Noam Postavsky, 2019/12/22