mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-13 13:13:03 +00:00
Merge: let snippets expand in strings/comments by default
Also make yas-buffer-local-condition into a defcustom.
This commit is contained in:
commit
cddb8260a0
@ -178,32 +178,30 @@ In particular, the following things matter:
|
|||||||
(yas-activate-extra-mode 'rails-mode)))
|
(yas-activate-extra-mode 'rails-mode)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
- Buffer-local
|
- Buffer-local [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] variable
|
||||||
[[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]]
|
|
||||||
variable
|
|
||||||
|
|
||||||
This variable provides finer grained control over what snippets can
|
This variable provides finer grained control over what snippets can
|
||||||
be expanded in the current buffer. The default value won't let you
|
be expanded in the current buffer. For example, the constant
|
||||||
expand snippets inside comments or string literals for example. See
|
[[sym:yas-not-string-or-comment-condition][=yas-not-string-or-comment-condition=]] has a value that disables
|
||||||
The condition system\_ for more info.
|
snippet expansion inside comments or string literals. See [[condition-system][the
|
||||||
|
condition system]] for more info.
|
||||||
|
|
||||||
** The condition system
|
** The condition system <<condition-system>>
|
||||||
|
|
||||||
Consider this scenario: you are an old Emacs hacker. You like the
|
Consider this scenario: you are an old Emacs hacker. You like the
|
||||||
abbrev-way and bind [[sym:yas-expand][=yas-expand=]] to =SPC=. However, you don't want
|
abbrev-way and bind [[sym:yas-expand][=yas-expand=]] to =SPC=. However, you don't want
|
||||||
=if= to be expanded as a snippet when you are typing in a comment
|
=if= to be expanded as a snippet when you are typing in a comment
|
||||||
block or a string (e.g. in =python-mode=).
|
block or a string (e.g. in =python-mode=).
|
||||||
|
|
||||||
If you use the =# condition := directive (see
|
If you use the =# condition := directive (see [[./snippet-development.org][Writing Snippets]]) you
|
||||||
[[./snippet-development.org][Writing Snippets]]) you could just specify
|
could just specify the condition for =if= to be =(not
|
||||||
the condition for =if= to be =(not (python-syntax-comment-or-string-p))=. But how
|
(python-syntax-comment-or-string-p))=. But how about =while=, =for=,
|
||||||
about =while=, =for=, etc. ? Writing the same condition for all the
|
etc? Writing the same condition for all the snippets is just boring.
|
||||||
snippets is just boring. So has a buffer local variable
|
So you can instead set [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] to =(not
|
||||||
[[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]]. You can set this variable to
|
(python-syntax-comment-or-string-p))= in =python-mode-hook=.
|
||||||
=(not (python-syntax-comment-or-string-p))= in =python-mode-hook=.
|
|
||||||
|
|
||||||
Then, what if you really want some particular snippet to expand even
|
Then, what if you really want some particular snippet to expand even
|
||||||
inside a comment? Set [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] like this
|
inside a comment? Set [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] like this
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(add-hook 'python-mode-hook
|
(add-hook 'python-mode-hook
|
||||||
@ -214,10 +212,10 @@ inside a comment? Set [[sym:yas-buffer-local-condition][=yas-buffer-local-condit
|
|||||||
t))))
|
t))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
... and specify the condition for a snippet that you're going to expand
|
... and for a snippet that you want to expand in comments, specify a
|
||||||
in comment to be evaluated to the symbol =force-in-comment=. Then it can
|
condition which evaluates to the symbol =force-in-comment=. Then it
|
||||||
be expanded as you expected, while other snippets like =if= still can't
|
can be expanded as you expected, while other snippets like =if= still
|
||||||
expanded in comment.
|
can't expanded in comments.
|
||||||
|
|
||||||
For the full set of possible conditions, see the documentation for
|
For the full set of possible conditions, see the documentation for
|
||||||
[[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]].
|
[[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]].
|
||||||
|
21
yasnippet.el
21
yasnippet.el
@ -456,13 +456,17 @@ Attention: These hooks are not run when exiting nested/stacked snippet expansion
|
|||||||
'()
|
'()
|
||||||
"Hooks to run just before expanding a snippet.")
|
"Hooks to run just before expanding a snippet.")
|
||||||
|
|
||||||
(defvar yas-buffer-local-condition
|
(defconst yas-not-string-or-comment-condition
|
||||||
'(if (and (let ((ppss (syntax-ppss)))
|
'(if (and (let ((ppss (syntax-ppss)))
|
||||||
(or (nth 3 ppss) (nth 4 ppss)))
|
(or (nth 3 ppss) (nth 4 ppss)))
|
||||||
(memq this-command '(yas-expand yas-expand-from-trigger-key
|
(memq this-command '(yas-expand yas-expand-from-trigger-key
|
||||||
yas-expand-from-keymap)))
|
yas-expand-from-keymap)))
|
||||||
'(require-snippet-condition . force-in-comment)
|
'(require-snippet-condition . force-in-comment)
|
||||||
t)
|
t)
|
||||||
|
"Disables snippet expansion in strings and comments.
|
||||||
|
To use, set `yas-buffer-local-condition' to this value.")
|
||||||
|
|
||||||
|
(defcustom yas-buffer-local-condition t
|
||||||
"Snippet expanding condition.
|
"Snippet expanding condition.
|
||||||
|
|
||||||
This variable is a Lisp form which is evaluated every time a
|
This variable is a Lisp form which is evaluated every time a
|
||||||
@ -509,12 +513,15 @@ conditions.
|
|||||||
(setq yas-buffer-local-condition
|
(setq yas-buffer-local-condition
|
||||||
\\='(if (python-syntax-comment-or-string-p)
|
\\='(if (python-syntax-comment-or-string-p)
|
||||||
\\='(require-snippet-condition . force-in-comment)
|
\\='(require-snippet-condition . force-in-comment)
|
||||||
t))))
|
t))))"
|
||||||
|
:type
|
||||||
The default value is similar, it filters out potential snippet
|
`(choice
|
||||||
expansions inside comments and string literals, unless the
|
(const :tag "Disable snippet expansion inside strings and comments"
|
||||||
snippet itself contains a condition that returns the symbol
|
,yas-not-string-or-comment-condition)
|
||||||
`force-in-comment'.")
|
(const :tag "Expand all snippets regardless of conditions" always)
|
||||||
|
(const :tag "Expand snippets unless their condition is nil" t)
|
||||||
|
(const :tag "Disable all snippet expansion" nil)
|
||||||
|
sexp))
|
||||||
|
|
||||||
|
|
||||||
;;; Internal variables
|
;;; Internal variables
|
||||||
|
Loading…
x
Reference in New Issue
Block a user