mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-13 13:13:03 +00:00
Close #937: Officially support automatically moving to next field
* yasnippet-tests.el (auto-next-field): New test. (yas-saving-variables): Move up in the file. * yasnippet.el (yas--auto-next): New helper. (yas-auto-next): New user-visible snippet helper. * doc/snippet-development.org (Choosing fields value from a list and other tricks): Add mention of yas-auto-next.
This commit is contained in:
parent
5a29fe67d7
commit
4f78d03f85
@ -420,8 +420,19 @@ The [[sym:yas-choose-value][=yas-choose-value=]] does this work for you. For exa
|
|||||||
</div>
|
</div>
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
See the definition of [[sym:yas-choose-value][=yas-choose-value=]] to see how it was written using
|
See the definition of [[sym:yas-choose-value][=yas-choose-value=]] to see how it was written
|
||||||
the two variables.
|
using the two variables. If you're really lazy :) and can't spare a
|
||||||
|
tab keypress, you can automatically move to the next field (or exit)
|
||||||
|
after choosing the value with [[sym:yas-auto-next][=yas-auto-next=]]. The snippet above
|
||||||
|
becomes:
|
||||||
|
|
||||||
|
#+BEGIN_SRC snippet
|
||||||
|
<div align="${2:$$(yas-auto-next
|
||||||
|
(yas-choose-value
|
||||||
|
'("right" "center" "left")))}">
|
||||||
|
$0
|
||||||
|
</div>
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
Here's another use, for LaTeX-mode, which calls reftex-label just as you
|
Here's another use, for LaTeX-mode, which calls reftex-label just as you
|
||||||
enter snippet field 2. This one makes use of [[sym:yas-modified-p][=yas-modified-p=]] directly.
|
enter snippet field 2. This one makes use of [[sym:yas-modified-p][=yas-modified-p=]] directly.
|
||||||
|
@ -603,6 +603,30 @@ mapconcat #'(lambda (arg)
|
|||||||
(ert-simulate-command '(yas-next-field))
|
(ert-simulate-command '(yas-next-field))
|
||||||
(should (looking-at (concat "blo" expected))))))
|
(should (looking-at (concat "blo" expected))))))
|
||||||
|
|
||||||
|
(defmacro yas-saving-variables (&rest body)
|
||||||
|
(declare (debug t))
|
||||||
|
`(yas-call-with-saving-variables #'(lambda () ,@body)))
|
||||||
|
|
||||||
|
(ert-deftest auto-next-field ()
|
||||||
|
"Automatically exit a field after evaluating its transform."
|
||||||
|
(with-temp-buffer
|
||||||
|
(yas-saving-variables
|
||||||
|
(yas-with-snippet-dirs
|
||||||
|
`((".emacs.d/snippets"
|
||||||
|
("ruby-mode" ("snip" . ,(concat "foo ${1:$$"
|
||||||
|
(prin1-to-string '(yas-auto-next
|
||||||
|
(yas-choose-value
|
||||||
|
"bar" "foo")))
|
||||||
|
"} baz ${2:quinn} quinn")))))
|
||||||
|
(yas-reload-all)
|
||||||
|
(ruby-mode)
|
||||||
|
(yas-minor-mode 1)
|
||||||
|
(set (make-local-variable 'yas-prompt-functions) `(yas-no-prompt))
|
||||||
|
(yas-mock-insert "snip")
|
||||||
|
(ert-simulate-command '(yas-expand))
|
||||||
|
(yas-mock-insert "quux")
|
||||||
|
(should (equal "foo bar baz quux quinn" (buffer-string)))))))
|
||||||
|
|
||||||
|
|
||||||
;;; Snippet expansion and character escaping
|
;;; Snippet expansion and character escaping
|
||||||
;;; Thanks to @zw963 (Billy) for the testing
|
;;; Thanks to @zw963 (Billy) for the testing
|
||||||
@ -754,10 +778,6 @@ mapconcat #'(lambda (arg)
|
|||||||
(and (buffer-name ,temp-buffer)
|
(and (buffer-name ,temp-buffer)
|
||||||
(kill-buffer ,temp-buffer))))))))
|
(kill-buffer ,temp-buffer))))))))
|
||||||
|
|
||||||
(defmacro yas-saving-variables (&rest body)
|
|
||||||
(declare (debug t))
|
|
||||||
`(yas-call-with-saving-variables #'(lambda () ,@body)))
|
|
||||||
|
|
||||||
(ert-deftest example-for-issue-474 ()
|
(ert-deftest example-for-issue-474 ()
|
||||||
(yas--with-font-locked-temp-buffer
|
(yas--with-font-locked-temp-buffer
|
||||||
(c-mode)
|
(c-mode)
|
||||||
|
12
yasnippet.el
12
yasnippet.el
@ -2987,6 +2987,18 @@ The last element of POSSIBILITIES may be a list of strings."
|
|||||||
(funcall fn "Choose: " possibilities))
|
(funcall fn "Choose: " possibilities))
|
||||||
yas-prompt-functions)))
|
yas-prompt-functions)))
|
||||||
|
|
||||||
|
(defun yas--auto-next ()
|
||||||
|
"Helper for `yas-auto-next'."
|
||||||
|
(remove-hook 'post-command-hook #'yas--auto-next t)
|
||||||
|
(yas-next-field))
|
||||||
|
|
||||||
|
(defmacro yas-auto-next (&rest body)
|
||||||
|
"Automatically advance to next field after eval'ing BODY."
|
||||||
|
(declare (indent 0) (debug t))
|
||||||
|
`(unless yas-moving-away-p
|
||||||
|
(prog1 ,@body
|
||||||
|
(add-hook 'post-command-hook #'yas--auto-next nil t))))
|
||||||
|
|
||||||
(defun yas-key-to-value (alist)
|
(defun yas-key-to-value (alist)
|
||||||
(unless (or yas-moving-away-p
|
(unless (or yas-moving-away-p
|
||||||
yas-modified-p)
|
yas-modified-p)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user