From 748d767cf1cfa4f3e89068eb790972fa5490c6dd Mon Sep 17 00:00:00 2001 From: Zhang Chiyuan Date: Mon, 3 Mar 2008 16:29:22 +0000 Subject: [PATCH] place cursor at a proper position after snippet expanded. --- yasnippet.el | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/yasnippet.el b/yasnippet.el index e861195..dd86264 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -311,9 +311,22 @@ will be deleted before inserting template." ;; Step 10: move to end and make sure exit-marker exist (goto-char (point-max)) (unless (yas/snippet-exit-marker snippet) - (yas/snippet-exit-marker-set snippet (copy-marker (point) t))))) - - (delete-char length))) + (yas/snippet-exit-marker-set snippet (copy-marker (point) t))) + + ;; Step 11: remove the trigger key + (widen) + (delete-char length) + + ;; Step 12: place the cursor at a proper place + (let ((groups (yas/snippet-field-groups snippet)) + (exit-marker (yas/snippet-exit-marker snippet))) + (if groups + (goto-char (overlay-start + (yas/snippet-field-overlay + (yas/snippet-field-group-primary + (car groups))))) + ;; no need to call exit-snippet, since no overlay created. + (goto-char exit-marker))))))) (defun yas/current-snippet-overlay () "Get the most proper overlay which is belongs to a snippet."