pax_global_header 0000666 0000000 0000000 00000000064 12403655040 0014511 g ustar 00root root 0000000 0000000 52 comment=cc64ff62bff29a2dc794a7573299fbe0b2bd1547
yasnippet-0.9.0~beta/ 0000775 0000000 0000000 00000000000 12403655040 0014565 5 ustar 00root root 0000000 0000000 yasnippet-0.9.0~beta/.gitignore 0000664 0000000 0000000 00000000250 12403655040 0016552 0 ustar 00root root 0000000 0000000 authors.txt
doc/gh-pages
doc/*.html
doc/html-revision
pkg/
extras/imported/**
!extras/imported/*/.yas-setup.el
.yas-compiled-snippets.el
*.elc
ert-x.*
ert.*
yasnippet-0.9.0~beta/.gitmodules 0000664 0000000 0000000 00000000354 12403655040 0016744 0 ustar 00root root 0000000 0000000 [submodule "snippets"]
path = snippets
url = https://github.com/AndreaCrotti/yasnippet-snippets.git
branch = master
[submodule "yasmate"]
path = yasmate
url = https://github.com/capitaomorte/yasmate.git
yasnippet-0.9.0~beta/.travis.yml 0000664 0000000 0000000 00000001472 12403655040 0016702 0 ustar 00root root 0000000 0000000 language: emacs
env:
- "EMACS=emacs23"
- "EMACS=emacs24"
install:
- if [ "$EMACS" = "emacs23" ]; then
sudo apt-get -qq update &&
sudo apt-get -qq -f install &&
sudo apt-get -qq install emacs23-nox &&
curl -LO https://raw.githubusercontent.com/ohler/ert/c619b56c5bc6a866e33787489545b87d79973205/lisp/emacs-lisp/ert.el &&
curl -LO https://raw.githubusercontent.com/ohler/ert/c619b56c5bc6a866e33787489545b87d79973205/lisp/emacs-lisp/ert-x.el &&
curl -Lo cl-lib.el http://elpa.gnu.org/packages/cl-lib-0.5.el;
fi
- if [ "$EMACS" = "emacs24" ]; then
sudo add-apt-repository -y ppa:cassou/emacs &&
sudo apt-get -qq update &&
sudo apt-get -qq -f install &&
sudo apt-get -qq install emacs24-nox;
fi
script:
- rake compile; rake tests
yasnippet-0.9.0~beta/README.mdown 0000664 0000000 0000000 00000014612 12403655040 0016574 0 ustar 00root root 0000000 0000000 [](https://travis-ci.org/capitaomorte/yasnippet)
# Intro
**YASnippet** is a template system for Emacs. It allows you to
type an abbreviation and automatically expand it into function
templates. Bundled language templates include: C, C++, C#, Perl,
Python, Ruby, SQL, LaTeX, HTML, CSS and more. The snippet syntax
is inspired from [TextMate's][textmate-snippets] syntax, you can
even [import](#import) most TextMate templates to
YASnippet. Watch [a demo on YouTube][youtube-demo] or download a
[higher resolution version][high-res-demo].
[textmate-snippets]: http://manual.macromates.com/en/snippets
[youtube-demo]: http://www.youtube.com/watch?v=ZCGmZK4V7Sg
[high-res-demo]: http://yasnippet.googlecode.com/files/yas_demo.avi
# Installation
## Install the most recent version
Clone this repository somewhere
$ cd ~/.emacs.d/plugins
$ git clone --recursive https://github.com/capitaomorte/yasnippet
Add the following in your `.emacs` file:
(add-to-list 'load-path
"~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas-global-mode 1)
Add your own snippets to `~/.emacs.d/snippets` by placing files there or invoking `yas-new-snippet`.
## Install with `package-install`
In a recent emacs `M-x list-packages` is the recommended way to list and install packages.
[MELPA][melpa] keeps a very recent snapshot of YASnippet, see http://melpa.milkbox.net/#installing.
## Install with el-get
El-get is a nice way to get the most recent version, too. See
https://github.com/dimitri/el-get for instructions. Be sure to install the
"master" branch since the 3.x series still use the old googlecode code, base.
Consider using this "local" recipe.
(push '(:name yasnippet
:website "https://github.com/capitaomorte/yasnippet.git"
:description "YASnippet is a template system for Emacs."
:type github
:pkgname "capitaomorte/yasnippet"
:features "yasnippet"
:compile "yasnippet.el")
el-get-sources)
## Use `yas-minor-mode` on a per-buffer basis
To use YASnippet as a non-global minor mode, replace `(yas-global-mode 1)` with
`(yas-reload-all)` to load the snippet tables. Then add a call to
`(yas-minor-mode)` to the major-modes where you to enable YASnippet.
(add-hook 'prog-mode-hook
'(lambda ()
(yas-minor-mode)))
# Where are the snippets?
Yasnippet no longer bundles snippets directly, but it's very easy to
get some!
If you git-cloned yasnippet with the `--recursive` option you'll also
download "git submodules" and find two subdirs under the main tree.
1. `snippets/`
Points to [yasnippet-snippets][yasnippet-snippets] the snippet
collection of [AndreaCrotti](https://github.com/AndreaCrotti).
The default configuraiton already points to this dir, so to use
them, just make sure the submodule really was downloaded
(i.e. there are some files under `snippets/`)
2. `yasmate/`
Points to a github repo of the [yasmate][yasmate] tool, which is
dedicated to converting textmate bundles into yasnippet snippets.
To use these snippets you have to run the tool first, so
[see its doc][yasmate]), and then point the `yas-snippet-dirs`
variable to the `.../yasmate/snippets` subdir.
If you have a working ruby environment, you can probably get lucky
directly with `rake convert-bundles`.
Naturally, you can point `yas-snippet-dirs` to good snippet collections out
there. If you have created snippets for a mode, or multiple modes,
consider creating a repository to host them, then tell users that it
should be added like this to `yas-snippet-dirs`:
(setq yas-snippet-dirs
'("~/.emacs.d/snippets" ;; personal snippets
"/path/to/some/collection/" ;; foo-mode and bar-mode snippet collection
"/path/to/yasnippet/yasmate/snippets" ;; the yasmate collection
"/path/to/yasnippet/snippets" ;; the default collection
))
(yas-global-mode 1) ;; or M-x yas-reload-all if you've started YASnippet already.
# Documentation, issues, etc
Please refer to the comprehensive (albeit slightly outdated)
[documentation][docs] for full customization
and support. If you find a bug, please report it on
[the GitHub issue tracker][issues]. (please **do not** submit new issues to the old
[googlecode tracker][googlecode tracker])
## Important note regarding bug reporting
If you think have found a bug, please report it clearly. Yasnippet
does have (lots of) bugs and your reports are very valuable. Here's
a [great example](https://github.com/capitaomorte/yasnippet/issues/318)
of a bug report. It has everything needed for a sucessfull analysis and
speedy resolution:
*Before* reporting try to reproduce the bug **without** your usual
`.emacs` (or whatever startup file you use). Do so either by starting
emacs from the command line with the `-Q` switch, or by temporarily
moving away your `.emacs` and creating a new smaller one just for
reproducing the bug. Paste that file in your bug report. Paste any sequence
of relevant shell commands before you launch Emacs.
*Then*, describe steps taken to reproduce from an
end-user perspective. Try to be as unambiguous as possible.
Also, don't forget to state the Emacs version (use `M-x emacs-version`) and
the yasnippet version you are using (if using the latest from github,
do `git log -1` in the dir).
Any more info is welcome, but don't just paste a backtrace or an error
message string you got. I'm not saying your analysis might not be
useful but following the instructions above immediately gives me a
clear picture of what is happening.
There is also a [YASnippet google group][forum]. I will keep the group
open for reference and for discussion among users, unfortunately I
can't guarantee a timely response, so maybe creating a github issue
clearly marking your intent (user support/bug/feature request).
Finally, thank you very much for using YASnippet!
[docs]: http://capitaomorte.github.com/yasnippet/
[issues]: https://github.com/capitaomorte/yasnippet/issues
[googlecode tracker]: http://code.google.com/p/yasnippet/issues/list
[forum]: http://groups.google.com/group/smart-snippet
[melpa]: http://melpa.milkbox.net/
[yasmate]: http://github.com/capitaomorte/yasmate
[yasnippet-snippets]: http://github.com/AndreaCrotti/yasnippet-snippets
yasnippet-0.9.0~beta/Rakefile 0000664 0000000 0000000 00000005540 12403655040 0016236 0 ustar 00root root 0000000 0000000 # -*- Ruby -*-
require 'fileutils'
$EMACS = ENV["EMACS"]
if not $EMACS or $EMACS == 't'
$EMACS = "emacs"
end
def find_version
File.read("yasnippet.el", :encoding => "UTF-8") =~ /;; Package-version: *([0-9.]+?) *$/
$version = $1
end
find_version
FileUtils.mkdir_p('pkg')
desc "run tests in batch mode"
task :tests do
sh "#{$EMACS} -Q -L . -l yasnippet-tests.el" +
" --batch -f ert-run-tests-batch-and-exit"
end
desc "create a release package"
task :package do
release_dir = "pkg/yasnippet-#{$version}"
FileUtils.mkdir_p(release_dir)
files = ['snippets', 'yasnippet.el']
FileUtils.cp_r files, release_dir
File.open(File.join(release_dir,'yasnippet-pkg.el'), 'w') do |file|
file.puts < [:package, 'doc:archive'] do
raise "Not implemented for github yet!"
end
desc "Generate document"
task :doc do
sh "#{$EMACS} -Q -L . --batch -l doc/yas-doc-helper.el" +
" -f yas--generate-html-batch"
end
namespace :doc do
task :archive do
release_dir = "pkg/yasnippet-#{$version}"
FileUtils.mkdir_p(release_dir)
sh "tar cjf pkg/yasnippet-doc-#{$version}.tar.bz2 " +
"--exclude=doc/.svn --exclude=doc/images/.svn doc/*.html doc/images"
end
task :upload do
if File.exists? 'doc/gh-pages'
Dir.chdir 'doc/gh-pages' do
sh "git checkout gh-pages"
end
Dir.glob("doc/*.{html,css}").each do |file|
FileUtils.cp file, 'doc/gh-pages'
end
Dir.glob("doc/images/*").each do |file|
FileUtils.cp file, 'doc/gh-pages/images'
end
Dir.glob("doc/stylesheets/*.css").each do |file|
FileUtils.cp file, 'doc/gh-pages/stylesheets'
end
curRev = `git rev-parse --verify HEAD`.chomp()
expRev = IO.read('doc/html-revision').chomp()
if curRev != expRev
raise ("The HTML rev: #{expRev},\n" +
"current rev: #{curRev}!\n")
end
if !system "git diff-index --quiet HEAD"
system "git status --untracked-files=no"
raise "You have uncommitted changes!"
end
Dir.chdir 'doc/gh-pages' do
sh "git commit -a -m 'Automatic documentation update.\n\n" +
"From #{curRev.chomp()}'"
sh "git push"
end
end
end
end
desc "Compile yasnippet.el into yasnippet.elc"
rule '.elc' => '.el' do |t|
sh "#{$EMACS} --batch -L . --eval \"(byte-compile-file \\\"#{t.source}\\\")\""
end
task :compile => FileList["yasnippet.el"].ext('elc')
task :default => :doc
desc "use yasmate to convert textmate bundles"
task :convert_bundles do
cd "yasmate"
sh "rake convert_bundles"
end
yasnippet-0.9.0~beta/doc/ 0000775 0000000 0000000 00000000000 12403655040 0015332 5 ustar 00root root 0000000 0000000 yasnippet-0.9.0~beta/doc/faq.org 0000664 0000000 0000000 00000014222 12403655040 0016613 0 ustar 00root root 0000000 0000000 #+SETUPFILE: org-setup.inc
#+TITLE: Frequently Asked Questions
* Why is there an extra newline?
If you have a newline at the end of the snippet definition file, then
YASnippet will add a newline when you expanding a snippet. Please don't
add a newline at the end if you don't want it when you saving the
snippet file.
Note some editors will automatically add a newline for you. In Emacs, if
you set =require-final-newline= to =t=, it will add the final newline
for you automatically.
* Why doesn't TAB expand a snippet?
First check the mode line to see if there's =yas=. If not, then try
=M-x yas-minor-mode= to manually turn on the minor mode and try to
expand the snippet again. If it works, then, you can add the following
code to your =.emacs= /before/ loading YASnippet:
#+BEGIN_SRC emacs-lisp
(add-hook 'the-major-mode-hook 'yas-minor-mode-on)
#+END_SRC
where =the-major-mode= is the major mode in which [[sym:yas-minor-mode][=yas-minor-mode=]] isn't
enabled by default.
From YASnippet 0.6 you can also use the command =M-x yas-global-mode= to
turn on YASnippet automatically for /all/ major modes.
If [[sym:yas-minor-mode][=yas-minor-mode=]] is on but the snippet still not expanded. Then try
to see what command is bound to the =TAB= key: press =C-h k= and then
press =TAB=. Emacs will show you the result.
You'll see a buffer prompted by Emacs saying that
=TAB runs the command ...=. Alternatively, you might see
= runs the command ...=, note the difference between =TAB= and
== where the latter has priority. If you see == bound to a
command other than [[sym:yas-expand][=yas-expand=]], (e.g. in =org-mode=) you can try the
following code to work around:
#+BEGIN_SRC emacs-lisp
(add-hook 'org-mode-hook
(let ((original-command (lookup-key org-mode-map [tab])))
`(lambda ()
(setq yas-fallback-behavior
'(apply ,original-command))
(local-set-key [tab] 'yas-expand))))
#+END_SRC
replace =org-mode-hook= and =org-mode-map= with the major mode hook you
are dealing with (Use =C-h m= to see what major mode you are in).
As an alternative, you can also try
#+BEGIN_SRC emacs-lisp
(defun yas-advise-indent-function (function-symbol)
(eval `(defadvice ,function-symbol (around yas-try-expand-first activate)
,(format
"Try to expand a snippet before point, then call `%s' as usual"
function-symbol)
(let ((yas-fallback-behavior nil))
(unless (and (interactive-p)
(yas-expand))
ad-do-it)))))
(yas-advise-indent-function 'ruby-indent-line)
#+END_SRC
To /advise/ the modes indentation function bound to TAB, (in this case
=ruby-indent-line=) to first try to run [[sym:yas-expand][=yas-expand=]].
If the output of =C-h k RET = tells you that == is indeed
bound to [[sym:yas-expand][=yas-expand=]] but YASnippet still doesn't work, check your
configuration and you may also ask for help on the [[http://groups.google.com/group/smart-snippet][discussion group]].
See this particular [[http://code.google.com/p/yasnippet/issues/detail?id=93&can=1][thread]] for quite some solutions and alternatives.
Don't forget to attach the information on what command is bound to TAB
as well as the mode information (Can be obtained by =C-h m=).
* Why doesn't TAB navigation work with flyspell
A workaround is to inhibit flyspell overlays while the snippet is
active:
#+BEGIN_SRC emacs-lisp
(add-hook 'flyspell-incorrect-hook
#'(lambda (dummy1 dummy2 dymmy3)
(and yas-active-field-overlay
(overlay-buffer yas-active-field-overlay))))
#+END_SRC
This is apparently related to overlay priorities. For some reason, the
=keymap= property of flyspell's overlays always takes priority over the
same property in YASnippet's overlays, even if one sets the latter's
=priority= property to something big. If you know emacs-lisp and can
solve this problem, drop a line in the
[[http://groups.google.com/group/smart-snippet][discussion group]].
* How to I use alternative keys, i.e. not TAB?
Edit the keymaps [[sym:yas-minor-mode-map][=yas-minor-mode-map=]] and
[[sym:yas-keymap][=yas-keymap=]] as you would any other keymap:
#+begin_src emacs-lisp :exports code
(define-key yas-minor-mode-map (kbd "") nil)
(define-key yas-minor-mode-map (kbd "TAB") nil)
(define-key yas-minor-mode-map (kbd "") 'yas-expand)
;;keys for navigation
(define-key yas-keymap [(tab)] nil)
(define-key yas-keymap (kbd "TAB") nil)
(define-key yas-keymap [(shift tab)] nil)
(define-key yas-keymap [backtab] nil)
(define-key yas-keymap (kbd "") 'yas-next-field-or-maybe-expand)
(define-key yas-keymap (kbd "") 'yas-prev)
#+end_src
* How do I turn off the minor mode where in some buffers?
The best way, since version 0.6.1c, is to set the default value of the
variable [[sym:yas-dont-activate][=yas-dont-activate=]] to a lambda function like so:
#+BEGIN_SRC emacs-lisp
(set-default 'yas-dont-activate
#'(lambda ()
(and yas-root-directory
(null (yas-get-snippet-tables)))))
#+END_SRC
This is also the default value starting for that version. It skips the
minor mode in buffers where it is not applicable (no snippet tables),
but only once you have setup your yas-root-directory.
* How do I define an abbrev key containing characters not supported by the filesystem?
- *Note*: This question applies if you're still defining snippets
whose key /is/ the filename. This is behavior still provided by
version 0.6 for backward compatibilty, but is somewhat
deprecated...
For example, you want to define a snippet by the key =<= which is not a
valid character for filename on Windows. This means you can't use the
filename as a trigger key in this case.
You should rather use the =# key:= directive to specify the key of the
defined snippet explicitly and name your snippet with an arbitrary valid
filename, =lt.YASnippet= for example, using =<= for the =# key:=
directive:
#+BEGIN_SRC snippet
# key: <
# name: <...>
# --
<${1:div}>$0$1>
#+END_SRC
yasnippet-0.9.0~beta/doc/images/ 0000775 0000000 0000000 00000000000 12403655040 0016577 5 ustar 00root root 0000000 0000000 yasnippet-0.9.0~beta/doc/images/bg-content-left.png 0000664 0000000 0000000 00000006313 12403655040 0022300 0 ustar 00root root 0000000 0000000 PNG
IHDR 2 ` vl IDATx]ˮK]kH_pň`zH ?09$ڋAt.WwޏU $1 ɯ)'^ڃyHHd HWO
N1 %<`B$@C#%2MV<"`Aרs⤄֫X/+ea2NDg=`>'A &`L 萉N.A4A x