summaryrefslogtreecommitdiffstats
path: root/emacs.d/lisp/yasnippet/doc/snippet-expansion.html
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2012-04-24 23:29:38 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2012-04-24 23:29:38 +0200
commit7a6bb0f05e349068b0a89514f1da33d6d7de30a9 (patch)
treec202b81dfaf524e71e881c15aa509c45445a64b3 /emacs.d/lisp/yasnippet/doc/snippet-expansion.html
parent66b95ab46d870f41c12c489eb21c9c82846d6112 (diff)
downloaddotfiles-7a6bb0f05e349068b0a89514f1da33d6d7de30a9.tar.gz
dotfiles-7a6bb0f05e349068b0a89514f1da33d6d7de30a9.tar.xz
dotfiles-7a6bb0f05e349068b0a89514f1da33d6d7de30a9.zip
emacs.d/lisp/yasnippet: added yasnippet
Diffstat (limited to '')
-rw-r--r--emacs.d/lisp/yasnippet/doc/snippet-expansion.html432
1 files changed, 432 insertions, 0 deletions
diff --git a/emacs.d/lisp/yasnippet/doc/snippet-expansion.html b/emacs.d/lisp/yasnippet/doc/snippet-expansion.html
new file mode 100644
index 0000000..2f0256c
--- /dev/null
+++ b/emacs.d/lisp/yasnippet/doc/snippet-expansion.html
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
+<title>Expanding snippets</title>
+<link rel="stylesheet" href="styles.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="expanding-snippets">
+<div id="header-region" class="clear-block"></div>
+<div id="wrapper">
+ <div id="container" class="clear-block">
+ <div id="header">
+ <div id="logo-floater">
+ <h1 class="title">Expanding snippets</h1>
+ </div>
+ <ul class="primary-links">
+ <li>
+ <a title="" href="index.html">Intro and tutorial</a>
+ </li>
+ <li>
+ <a title="" href="snippet-organization.html">Howto: organize</a>
+ </li>
+ <li>
+ <a title="" href="snippet-expansion.html">Howto: expand</a>
+ </li>
+ <li>
+ <a title="" href="snippet-development.html">Howto: write </a>
+ </li>
+ <li>
+ <a title="" href="snippet-menu.html">Howto: menu </a>
+ </li>
+ <li>
+ <a title="" href="faq.html">FAQ</a>
+ </li>
+ <li>
+ <a title="" href="changelog.html">ChangeLog</a>
+ </li>
+ <li>
+ <a title="" href="http://code.google.com/p/yasnippet/downloads/list">Download</a>
+ </li>
+ </ul>
+ </div>
+ <div id="center">
+ <div id="squeeze">
+ <div class="right-corner">
+ <div class="left-corner">
+ <p>
+ <b>Important:</b> This documentation applies to
+ the <b>SVN trunk</b> of YASnippet, which you
+ get <a href="http://code.google.com/p/yasnippet/source/checkout">here</a>. Documentation
+ for other versions can be found <a title=""
+ href="http://code.google.com/p/yasnippet/downloads/list">here</a>.
+ </p>
+ <div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#triggering-expansion" id="id2">Triggering expansion</a><ul>
+<li><a class="reference internal" href="#trigger-key" id="id3">Trigger key</a><ul>
+<li><a class="reference internal" href="#fallback-bahaviour" id="id4">Fallback bahaviour</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#insert-at-point" id="id5">Insert at point</a></li>
+<li><a class="reference internal" href="#snippet-keybinding" id="id6">Snippet keybinding</a></li>
+<li><a class="reference internal" href="#expanding-from-the-menu" id="id7">Expanding from the menu</a></li>
+<li><a class="reference internal" href="#expanding-with-hippie-expand" id="id8">Expanding with <tt class="docutils literal"><span class="pre">hippie-expand</span></tt></a></li>
+<li><a class="reference internal" href="#expanding-from-emacs-lisp-code" id="id9">Expanding from emacs-lisp code</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#controlling-expansion" id="id10">Controlling expansion</a><ul>
+<li><a class="reference internal" href="#eligible-snippets" id="id11">Eligible snippets</a></li>
+<li><a class="reference internal" href="#the-condition-system" id="id12">The condition system</a></li>
+<li><a class="reference internal" href="#multiples-snippet-with-the-same-key" id="id13">Multiples snippet with the same key</a><ul>
+<li><a class="reference internal" href="#use-the-x-window-system" id="id14">Use the X window system</a></li>
+<li><a class="reference internal" href="#minibuffer-prompting" id="id15">Minibuffer prompting</a></li>
+<li><a class="reference internal" href="#use-dropdown-menu-el" id="id16">Use <tt class="docutils literal"><span class="pre">dropdown-menu.el</span></tt></a></li>
+<li><a class="reference internal" href="#roll-your-own" id="id17">Roll your own</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference internal" href="#customizable-variables" id="id18">Customizable Variables</a><ul>
+<li><a class="reference internal" href="#yas-prompt-functions" id="id19"><tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt></a></li>
+<li><a class="reference internal" href="#yas-fallback-behavior" id="id20"><tt class="docutils literal"><span class="pre">yas/fallback-behavior</span></tt></a></li>
+<li><a class="reference internal" href="#yas-choose-keys-first" id="id21"><tt class="docutils literal"><span class="pre">yas/choose-keys-first</span></tt></a></li>
+<li><a class="reference internal" href="#yas-choose-tables-first" id="id22"><tt class="docutils literal"><span class="pre">yas/choose-tables-first</span></tt></a></li>
+<li><a class="reference internal" href="#yas-key-syntaxes" id="id23"><tt class="docutils literal"><span class="pre">yas/key-syntaxes</span></tt></a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="triggering-expansion">
+<h1><a class="toc-backref" href="#id2">Triggering expansion</a></h1>
+<p>You can use YASnippet to expand snippets in different ways:</p>
+<ul class="simple">
+<li>By typing an abbrev, the snippet <em>trigger key</em>, and then pressing
+the key defined in <tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt> (which defaults to
+&quot;TAB&quot;). This works in buffers where the minor mode
+<tt class="docutils literal"><span class="pre">yas/minor-mode</span></tt> is active;</li>
+<li>By invoking the command <tt class="docutils literal"><span class="pre">yas/insert-snippet</span></tt> (either by typing
+<tt class="docutils literal"><span class="pre">M-x</span> <span class="pre">yas/insert-snippet</span></tt> or its keybinding). This does <em>not</em>
+require <tt class="docutils literal"><span class="pre">yas/minor-mode</span></tt> to be active.</li>
+<li>By using the keybinding associated with an active snippet. This also
+requires <tt class="docutils literal"><span class="pre">yas/minor-mode</span></tt> to be active;</li>
+<li>By expanding directly from the &quot;YASnippet&quot; menu in the menu-bar</li>
+<li>By using hippie-expand</li>
+<li>Expanding from emacs-lisp code</li>
+</ul>
+<div class="section" id="trigger-key">
+<h2><a class="toc-backref" href="#id3">Trigger key</a></h2>
+<p>When <tt class="docutils literal"><span class="pre">yas/minor-mode</span></tt> is enabled, the keybinding taken from
+<tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt> will take effect.</p>
+<p><tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt> invokes <tt class="docutils literal"><span class="pre">yas/expand</span></tt>, which tries to expand a
+<em>snippet abbrev</em> (also known as <em>snippet key</em>) before point.</p>
+<p>The default key is <tt class="docutils literal"><span class="pre">&quot;TAB&quot;</span></tt>, however, you can freely set it to some
+other key.</p>
+<img align="left" alt="images/minor-mode-indicator.png" class="align-left" src="images/minor-mode-indicator.png" />
+<p>To enable the YASnippet minor mode in all buffers globally use the
+command <tt class="docutils literal"><span class="pre">yas/global-mode</span></tt>.</p>
+<p>When you use <tt class="docutils literal"><span class="pre">yas/global-mode</span></tt> you can also selectively disable
+YASnippet in some buffers by setting the buffer-local variable
+<tt class="docutils literal"><span class="pre">yas/dont-active</span></tt> in the buffer's mode hook.</p>
+<p>Trouble when using or understanding the <tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt> is easily
+the most controversial issue in YASsnippet. See the <a class="reference external" href="faq.html">FAQ</a>.</p>
+<div class="section" id="fallback-bahaviour">
+<h3><a class="toc-backref" href="#id4">Fallback bahaviour</a></h3>
+<p><tt class="docutils literal"><span class="pre">yas/fallback-behaviour</span></tt> is a customization variable bound to
+<tt class="docutils literal"><span class="pre">'call-other-command</span></tt> by default. If <tt class="docutils literal"><span class="pre">yas/expand</span></tt> failed to find
+any suitable snippet to expand, it will disable the minor mode
+temporarily and find if there's any other command bound the
+<tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt>.</p>
+<p>If found, the command will be called. Usually this works very well --
+when there's a snippet, expand it, otherwise, call whatever command
+originally bind to the trigger key.</p>
+<p>However, you can change this behavior by customizing the
+<tt class="docutils literal"><span class="pre">yas/fallback-behavior</span></tt> variable. If you set this variable to
+<tt class="docutils literal"><span class="pre">'return-nil</span></tt>, it will return <tt class="docutils literal"><span class="pre">nil</span></tt> instead of trying to call the
+<em>original</em> command when no snippet is found.</p>
+</div>
+</div>
+<div class="section" id="insert-at-point">
+<h2><a class="toc-backref" href="#id5">Insert at point</a></h2>
+<p>The command <tt class="docutils literal"><span class="pre">M-x</span> <span class="pre">yas/insert-snippet</span></tt> lets you insert snippets at
+point <em>for you current major mode</em>. It prompts you for the snippet
+key first, and then for a snippet template if more than one template
+exists for the same key.</p>
+<p>The list presented contains the snippets that can be inserted at
+point, according to the condition system. If you want to see all
+applicable snippets for the major mode, prefix this command with
+<tt class="docutils literal"><span class="pre">C-u</span></tt>.</p>
+<p>The prompting methods used are again controlled by
+<tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt>.</p>
+</div>
+<div class="section" id="snippet-keybinding">
+<h2><a class="toc-backref" href="#id6">Snippet keybinding</a></h2>
+<p>See the section of the <tt class="docutils literal"><span class="pre">#</span> <span class="pre">binding:</span></tt> directive in <a class="reference external" href="snippet-development.html">Writing
+Snippets</a>.</p>
+</div>
+<div class="section" id="expanding-from-the-menu">
+<h2><a class="toc-backref" href="#id7">Expanding from the menu</a></h2>
+<p>See <a class="reference external" href="snippet-menu.html">the YASnippet Menu</a>.</p>
+</div>
+<div class="section" id="expanding-with-hippie-expand">
+<h2><a class="toc-backref" href="#id8">Expanding with <tt class="docutils literal"><span class="pre">hippie-expand</span></tt></a></h2>
+<p>To integrate with <tt class="docutils literal"><span class="pre">hippie-expand</span></tt>, just put
+<tt class="docutils literal"><span class="pre">yas/hippie-try-expand</span></tt> in
+<tt class="docutils literal"><span class="pre">hippie-expand-try-functions-list</span></tt>. This probably makes more sense
+when placed at the top of the list, but it can be put anywhere you
+prefer.</p>
+</div>
+<div class="section" id="expanding-from-emacs-lisp-code">
+<h2><a class="toc-backref" href="#id9">Expanding from emacs-lisp code</a></h2>
+<p>Sometimes you might want to expand a snippet directly from you own
+elisp code. You should call <tt class="docutils literal"><span class="pre">yas/expand-snippet</span></tt> instead of
+<tt class="docutils literal"><span class="pre">yas/expand</span></tt> in this case.</p>
+<p>As with expanding from the menubar, the condition system and multiple
+candidates doesn't affect expansion. In fact, expanding from the
+YASnippet menu has the same effect of evaluating the follow code:</p>
+<div class="highlight"><pre>(<span style="color: #19177C">yas/expand-snippet</span> <span style="color: #19177C">template</span>)
+</pre></div>
+<p>See the internal documentation on <tt class="docutils literal"><span class="pre">yas/expand-snippet</span></tt> for more
+information.</p>
+</div>
+</div>
+<div class="section" id="controlling-expansion">
+<h1><a class="toc-backref" href="#id10">Controlling expansion</a></h1>
+<div class="section" id="eligible-snippets">
+<h2><a class="toc-backref" href="#id11">Eligible snippets</a></h2>
+<p>YASnippet does quite a bit of filtering to find out which snippets are
+eligible for expanding at the current cursor position.</p>
+<p>In particular, the following things matter:</p>
+<ul>
+<li><p class="first">Currently loaded snippets tables</p>
+<p>These are loaded from a directory hierarchy in your file system. See
+<a class="reference external" href="snippet-organization.html">Organizing Snippets</a>. They are named after major modes like
+<tt class="docutils literal"><span class="pre">html-mode</span></tt>, <tt class="docutils literal"><span class="pre">ruby-mode</span></tt>, etc...</p>
+</li>
+<li><p class="first">Major mode of the current buffer</p>
+<p>If the currrent major mode matches one of the loaded snippet tables,
+then all that table's snippets are considered for expansion. Use
+<tt class="docutils literal"><span class="pre">M-x</span> <span class="pre">describe-variable</span> <span class="pre">RET</span> <span class="pre">major-mode</span> <span class="pre">RET</span></tt> to find out which major
+mode you are in currently.</p>
+</li>
+<li><p class="first">Parent tables</p>
+<p>Snippet tables defined as the parent of some other eligible table
+are also considered. This works recursively, i.e. parents of parents
+of eligible tables are also considered.</p>
+</li>
+<li><p class="first">Buffer-local <tt class="docutils literal"><span class="pre">yas/mode-symbol</span></tt> variable</p>
+<p>This can be used to consider snippet tables whose name does not
+correspond to a major mode. If you set this variable to a name ,
+like <tt class="docutils literal"><span class="pre">rinari-minor-mode</span></tt>, you can have some snippets expand only
+in that minor mode. Naturally, you want to set this conditionally,
+i.e. only when entering that minor mode, so using a hook is a good
+idea.</p>
+</li>
+</ul>
+<div class="highlight"><pre><span style="color: #408080; font-style: italic">;; When entering rinari-minor-mode, consider also the snippets in the</span>
+<span style="color: #408080; font-style: italic">;; snippet table &quot;rails-mode&quot;</span>
+(<span style="color: #19177C">add-hook</span> <span style="color: #19177C">&#39;rinari-minor-mode-hook</span>
+ <span style="color: #0000FF">#&#39;</span>(<span style="color: #008000; font-weight: bold">lambda</span> ()
+ (<span style="color: #008000; font-weight: bold">setq</span> <span style="color: #19177C">yas/mode-symbol</span> <span style="color: #19177C">&#39;rails-mode</span>)))
+</pre></div>
+<ul>
+<li><p class="first">Buffer-local <tt class="docutils literal"><span class="pre">yas/buffer-local-condition</span></tt> variable</p>
+<p>This variable provides finer grained control over what snippets can
+be expanded in the current buffer. The default value won't let you
+expand snippets inside comments or string literals for example. See
+<a class="reference internal" href="#the-condition-system">The condition system</a> for more info.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="the-condition-system">
+<h2><a class="toc-backref" href="#id12">The condition system</a></h2>
+<p>Consider this scenario: you are an old Emacs hacker. You like the
+abbrev-way and set <tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt> to <tt class="docutils literal"><span class="pre">&quot;SPC&quot;</span></tt>. However,
+you don't want <tt class="docutils literal"><span class="pre">if</span></tt> to be expanded as a snippet when you are typing
+in a comment block or a string (e.g. in <tt class="docutils literal"><span class="pre">python-mode</span></tt>).</p>
+<p>If you use the <tt class="docutils literal"><span class="pre">#</span> <span class="pre">condition</span> <span class="pre">:</span></tt> directive (see <a class="reference external" href="snippet-development.html">Writing Snippets</a>)
+you could just specify the condition for <tt class="docutils literal"><span class="pre">if</span></tt> to be <tt class="docutils literal"><span class="pre">(not</span>
+<span class="pre">(python-in-string/comment))</span></tt>. But how about <tt class="docutils literal"><span class="pre">while</span></tt>, <tt class="docutils literal"><span class="pre">for</span></tt>,
+etc. ? Writing the same condition for all the snippets is just
+boring. So has a buffer local variable
+<tt class="docutils literal"><span class="pre">yas/buffer-local-condition</span></tt>. You can set this variable to <tt class="docutils literal"><span class="pre">(not</span>
+<span class="pre">(python-in-string/comment))</span></tt> in <tt class="docutils literal"><span class="pre">python-mode-hook</span></tt>.</p>
+<p>Then, what if you really want some particular snippet to expand even
+inside a comment? This is also possible! But let's stop telling the
+story and look at the rules:</p>
+<ul class="simple">
+<li>If <tt class="docutils literal"><span class="pre">yas/buffer-local-condition</span></tt> evaluate to nil, no snippets will
+be considered for expansion.</li>
+<li>If it evaluates to the a <em>cons cell</em> where the <tt class="docutils literal"><span class="pre">car</span></tt> is the symbol
+<tt class="docutils literal"><span class="pre">require-snippet-condition</span></tt> and the <tt class="docutils literal"><span class="pre">cdr</span></tt> is a symbol (let's
+call it <tt class="docutils literal"><span class="pre">requirement</span></tt>), then:<ul>
+<li>Snippets having no <tt class="docutils literal"><span class="pre">#</span> <span class="pre">condition:</span></tt> directive won't be considered;</li>
+<li>Snippets with conditions that evaluate to nil (or produce an
+error) won't be considered;</li>
+<li>If the snippet has a condition that evaluates to non-nil (let's
+call it <tt class="docutils literal"><span class="pre">result</span></tt>):<ul>
+<li>If <tt class="docutils literal"><span class="pre">requirement</span></tt> is <tt class="docutils literal"><span class="pre">t</span></tt>, the snippet is ready to be
+expanded;</li>
+<li>If <tt class="docutils literal"><span class="pre">requirement</span></tt> is <tt class="docutils literal"><span class="pre">eq</span></tt> to <tt class="docutils literal"><span class="pre">result</span></tt>, the snippet is ready
+to be expanded;</li>
+<li>Otherwise the snippet won't be considered.</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>If it evaluates to the symbol <tt class="docutils literal"><span class="pre">always</span></tt>, all snippets are
+considered for expansion, regardless of any conditions.</li>
+<li>If it evaluate to <tt class="docutils literal"><span class="pre">t</span></tt> or some other non-nil value:<ul>
+<li>If the snippet has no condition, or has a condition that evaluate
+to non-nil, it is ready to be expanded.</li>
+<li>Otherwise, it won't be considered.</li>
+</ul>
+</li>
+</ul>
+<p>In the mentioned scenario, set <tt class="docutils literal"><span class="pre">yas/buffer-local-condition</span></tt> like
+this</p>
+<div class="highlight"><pre>(<span style="color: #19177C">add-hook</span> <span style="color: #19177C">&#39;python-mode-hook</span>
+ <span style="color: #666666">&#39;</span>(<span style="color: #008000; font-weight: bold">lambda</span> ()
+ (<span style="color: #008000; font-weight: bold">setq</span> <span style="color: #19177C">yas/buffer-local-condition</span>
+ <span style="color: #666666">&#39;</span>(<span style="color: #008000; font-weight: bold">if</span> (<span style="color: #19177C">python-in-string/comment</span>)
+ <span style="color: #666666">&#39;</span>(<span style="color: #19177C">require-snippet-condition</span> <span style="color: #666666">.</span> <span style="color: #19177C">force-in-comment</span>)
+ <span style="color: #880000">t</span>))))
+</pre></div>
+<p>... and specify the condition for a snippet that you're going to
+expand in comment to be evaluated to the symbol
+<tt class="docutils literal"><span class="pre">force-in-comment</span></tt>. Then it can be expanded as you expected, while
+other snippets like <tt class="docutils literal"><span class="pre">if</span></tt> still can't expanded in comment.</p>
+</div>
+<div class="section" id="multiples-snippet-with-the-same-key">
+<h2><a class="toc-backref" href="#id13">Multiples snippet with the same key</a></h2>
+<p>The rules outlined <a class="reference external" href="Eligiblesnippets">above</a> can return more than
+one snippet to be expanded at point.</p>
+<p>When there are multiple candidates, YASnippet will let you select
+one. The UI for selecting multiple candidate can be customized through
+<tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt> , which defines your preferred methods of
+being prompted for snippets.</p>
+<p>You can customize it with <tt class="docutils literal"><span class="pre">M-x</span> <span class="pre">customize-variable</span> <span class="pre">RET</span>
+<span class="pre">yas/prompt-functions</span> <span class="pre">RET</span></tt>. Alternatively you can put in your
+emacs-file:</p>
+<div class="highlight"><pre>(<span style="color: #008000; font-weight: bold">setq</span> <span style="color: #19177C">yas/prompt-functions</span> <span style="color: #666666">&#39;</span>(<span style="color: #19177C">yas/x-prompt</span> <span style="color: #19177C">yas/dropdown-prompt</span>))
+</pre></div>
+<p>Currently there are some alternatives solution with YASnippet.</p>
+<img align="right" alt="images/x-menu.png" class="align-right" src="images/x-menu.png" />
+<div class="section" id="use-the-x-window-system">
+<h3><a class="toc-backref" href="#id14">Use the X window system</a></h3>
+<p>The function <tt class="docutils literal"><span class="pre">yas/x-prompt</span></tt> can be used to show a popup menu for you
+to select. This menu will be part of you native window system widget,
+which means:</p>
+<ul class="simple">
+<li>It usually looks beautiful. E.g. when you compile Emacs with gtk
+support, this menu will be rendered with your gtk theme.</li>
+<li>Emacs have little control over it. E.g. you can't use <tt class="docutils literal"><span class="pre">C-n</span></tt>,
+<tt class="docutils literal"><span class="pre">C-p</span></tt> to navigate.</li>
+<li>This function can't be used when in a terminal.</li>
+</ul>
+<img align="right" alt="images/ido-menu.png" class="align-right" src="images/ido-menu.png" />
+</div>
+<div class="section" id="minibuffer-prompting">
+<h3><a class="toc-backref" href="#id15">Minibuffer prompting</a></h3>
+<p>You can use functions <tt class="docutils literal"><span class="pre">yas/completing-prompt</span></tt> for the classic emacs
+completion method or <tt class="docutils literal"><span class="pre">yas/ido-prompt</span></tt> for a much nicer looking
+method. The best way is to try it. This works in a terminal.</p>
+<img align="right" alt="images/dropdown-menu.png" class="align-right" src="images/dropdown-menu.png" />
+</div>
+<div class="section" id="use-dropdown-menu-el">
+<h3><a class="toc-backref" href="#id16">Use <tt class="docutils literal"><span class="pre">dropdown-menu.el</span></tt></a></h3>
+<p>The function <tt class="docutils literal"><span class="pre">yas/dropdown-prompt</span></tt> can also be placed in the
+<tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt> list.</p>
+<p>This works in both window system and terminal and is customizable, you
+can use <tt class="docutils literal"><span class="pre">C-n</span></tt>, <tt class="docutils literal"><span class="pre">C-p</span></tt> to navigate, <tt class="docutils literal"><span class="pre">q</span></tt> to quit and even press
+<tt class="docutils literal"><span class="pre">6</span></tt> as a shortcut to select the 6th candidate.</p>
+</div>
+<div class="section" id="roll-your-own">
+<h3><a class="toc-backref" href="#id17">Roll your own</a></h3>
+<p>See below for the documentation on variable <tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt></p>
+</div>
+</div>
+</div>
+<div class="section" id="customizable-variables">
+<h1><a class="toc-backref" href="#id18">Customizable Variables</a></h1>
+<div class="section" id="yas-prompt-functions">
+<h2><a class="toc-backref" href="#id19"><tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt></a></h2>
+<p>You can write a function and add it to the <tt class="docutils literal"><span class="pre">yas/prompt-functions</span></tt>
+list. These functions are called with the following arguments:</p>
+<ul class="simple">
+<li>PROMPT: A string to prompt the user;</li>
+<li>CHOICES: A list of strings or objects;</li>
+<li>optional DISPLAY-FN : A function. When applied to each of the
+objects in CHOICES it will return a string;</li>
+</ul>
+<p>The return value of any function you put here should be one of
+the objects in CHOICES, properly formatted with DISPLAY-FN (if
+that is passed).</p>
+<ul class="simple">
+<li>To signal that your particular style of prompting is unavailable at
+the moment, you can also have the function return nil.</li>
+<li>To signal that the user quit the prompting process, you can signal
+<tt class="docutils literal"><span class="pre">quit</span></tt> with <tt class="docutils literal"><span class="pre">(signal</span> <span class="pre">'quit</span> <span class="pre">&quot;user</span> <span class="pre">quit!&quot;)</span></tt></li>
+</ul>
+</div>
+<div class="section" id="yas-fallback-behavior">
+<h2><a class="toc-backref" href="#id20"><tt class="docutils literal"><span class="pre">yas/fallback-behavior</span></tt></a></h2>
+<p>How to act when <tt class="docutils literal"><span class="pre">yas/expand</span></tt> does <em>not</em> expand a snippet.</p>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">call-other-command</span></tt> means try to temporarily disable YASnippet and</dt>
+<dd>call the next command bound to <tt class="docutils literal"><span class="pre">yas/trigger-key</span></tt>.</dd>
+</dl>
+<p><tt class="docutils literal"><span class="pre">return-nil</span></tt> means return nil. (i.e. do nothing)</p>
+<p>An entry (apply COMMAND . ARGS) means interactively call COMMAND, if
+ARGS is non-nil, call COMMAND non-interactively with ARGS as
+arguments.</p>
+</div>
+<div class="section" id="yas-choose-keys-first">
+<h2><a class="toc-backref" href="#id21"><tt class="docutils literal"><span class="pre">yas/choose-keys-first</span></tt></a></h2>
+<p>If non-nil, prompt for snippet key first, then for template.</p>
+<p>Otherwise prompts for all possible snippet names.</p>
+<p>This affects <tt class="docutils literal"><span class="pre">yas/insert-snippet</span></tt> and <tt class="docutils literal"><span class="pre">yas/visit-snippet-file</span></tt>.</p>
+</div>
+<div class="section" id="yas-choose-tables-first">
+<h2><a class="toc-backref" href="#id22"><tt class="docutils literal"><span class="pre">yas/choose-tables-first</span></tt></a></h2>
+<p>If non-nil, and multiple eligible snippet tables, prompts user for
+tables first.</p>
+<p>Otherwise, user chooses between the merging together of all
+eligible tables.</p>
+<p>This affects <tt class="docutils literal"><span class="pre">yas/insert-snippet</span></tt>, <tt class="docutils literal"><span class="pre">yas/visit-snippet-file</span></tt></p>
+</div>
+<div class="section" id="yas-key-syntaxes">
+<h2><a class="toc-backref" href="#id23"><tt class="docutils literal"><span class="pre">yas/key-syntaxes</span></tt></a></h2>
+<p>The default searching strategy is quite powerful. For example, in
+<tt class="docutils literal"><span class="pre">c-mode</span></tt>, <tt class="docutils literal"><span class="pre">bar</span></tt>, <tt class="docutils literal"><span class="pre">foo_bar</span></tt>, <tt class="docutils literal"><span class="pre">&quot;#foo_bar&quot;</span></tt> can all be recognized
+as a snippet key. Furthermore, the searching is in that order. In
+other words, if <tt class="docutils literal"><span class="pre">bar</span></tt> is found to be a key to some <em>valid</em> snippet,
+then that snippet is expanded and replaces the <tt class="docutils literal"><span class="pre">bar</span></tt>. Snippets
+pointed to by <tt class="docutils literal"><span class="pre">foo_bar</span></tt> and <tt class="docutils literal"><span class="pre">&quot;#foobar</span></tt> won't be considered.</p>
+<p>However, this strategy can also be customized easily from the
+<tt class="docutils literal"><span class="pre">yas/key-syntaxes</span></tt> variable. It is a list of syntax rules, the
+default value is <tt class="docutils literal"><span class="pre">(&quot;w&quot;</span> <span class="pre">&quot;w_&quot;</span> <span class="pre">&quot;w_.&quot;</span> <span class="pre">&quot;^</span> <span class="pre">&quot;)</span></tt>. Which means search the
+following thing until found one:</p>
+<ul class="simple">
+<li>a word.</li>
+<li>a symbol. In lisp, <tt class="docutils literal"><span class="pre">-</span></tt> and <tt class="docutils literal"><span class="pre">?</span></tt> can all be part of a symbol.</li>
+<li>a sequence of characters of either word, symbol or punctuation.</li>
+<li>a sequence of characters of non-whitespace characters.</li>
+</ul>
+<p>But you'd better keep the default value unless you want to understand
+how Emacs's syntax rules work...</p>
+</div>
+</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script type="text/javascript">
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-10536822-1");
+ pageTracker._trackPageview();
+ } catch(err) {}
+</script>
+</div>
+</body>
+</html>