yasnippets for jasp, ase and python
Posted February 17, 2014 at 09:03 AM | categories: ase, jasp, emacs | tags:
Table of Contents
In using [[http://github.com/jkitchin/jasp for calculations, I find there are lots of small python phrases I use over and over. Today I will examine using yasnippet to save time and keystrokes. yasnippet is a template expansion module, where you type a small set of characters, press Tab
, and the
characters "expand" to the full text. It is pretty sophisticated, and allows you to define "tab-stops" which you interactively fill in, and tab between like filling in a form.
All the snippets are defined in the
*Appendix.
1 Tangle the snippets, and add them to yasnippet
Each snippet definition belongs in a file in a directory. The main directory is called "snippets". Since I anticipate using these snippets in org-mode, each snippet is defined in a directory within snippets called "org-mode". First, we make the directory here. I also want to use the snippets in python mode, so we also create a python-mode directory here. We do not have to duplicate the snippets. We can create a file called .yas-parents , with one line in it containing "org-mode".
mkdir -p snippets/org-mode mkdir -p snippets/python-mode echo "org-mode" > snippets/python-mode/.yas-parents
Each snippet is defined in a src block with a :tangle
header. So, we can extract them all in one command here.
(org-babel-tangle)
snippets/org-mode/iase | snippets/org-mode/imp | snippets/org-mode/inp | snippets/org-mode/ij | snippets/org-mode/pl | snippets/org-mode/pyl | snippets/org-mode/pxl | snippets/org-mode/pp | snippets/org-mode/npa | snippets/org-mode/awt | snippets/org-mode/avw | snippets/org-mode/agf | snippets/org-mode/ape | snippets/org-mode/atms | snippets/org-mode/atm | snippets/org-mode/cga | snippets/org-mode/cc | snippets/org-mode/wjn | snippets/org-mode/wjl |
We also need to add our new directory to yasnippets. This is done by adding the directory to the yas-snippet-dirs
variable. You could add this to your init.el file to permanently add these snippets.
(add-to-list 'yas-snippet-dirs "c:/Users/jkitchin/Dropbox/blogofile-jkitchin.github.com/_blog/snippets")
c:/Users/jkitchin/Dropbox/blogofile-jkitchin.github.com/blog/snippets | ~/.emacs.d/snippets | c:/users/jkitchin/Dropbox/kitchingroup/jmax/elpa/yasnippet-20140106.1009/snippets |
Finally, we reload all the snippet definitions, so our new definitions are ready to use.
(yas-reload-all)
[yas] Reloaded everything (snippets will load just-in-time)... (some errors, check *Messages*).
Alternatively, you might just load this directory.
(yas-load-directory "./snippets")
2 Using the snippets
Each of these snippets is for a python phrase, but I usually write my python blocks in org-mode. You would use these by typing the shortcut name, and then pressing tab. Below I show what each shortcut expands to.
wjl → with jasp('') as calc:
wjn → with jasp('',) as calc:
calc.calculate(atoms)
cc → calc.calculate(atoms)
cga → atoms = calc.get_atoms()
atm → Atom('', )
atms → atoms = Atoms([], cell
)=
ape → atoms.get_potential_energy()
agf → atoms.get_forces()
avw → from ase.visualize import view
view(atoms)
awt → from ase.io import write
write('.png', atoms, show_unit_cell=2)
npa → np.array()
pp → plt.plot(, )
pxl → plt.xlabel()
pyl → plt.ylabel()
pl → plt.legend()
ij → from jasp import *
inp → import numpy as np
imp → import matplotlib.pyplot as plt
iase → from ase import Atom, Atoms
What other snippets would be handy?
3 Appendix
3.1 jasp snippets
# -*- mode: snippet -*- # -- with jasp('$1') as calc: $0
# -*- mode: snippet -*- # -- with jasp('$1',$0) as calc: calc.calculate(atoms)
# -*- mode: snippet -*- # -- calc.calculate(atoms)
# -*- mode: snippet -*- # -- atoms = calc.get_atoms()
3.2 ase snippets
Template for an ase.Atom
# -*- mode: snippet -*- # -- Atom('$1', $2)
# -*- mode: snippet -*- # -- atoms = Atoms([$1], cell=$2)
# -*- mode: snippet -*- # -- atoms.get_potential_energy()
# -*- mode: snippet -*- # -- atoms.get_forces()
# -*- mode: snippet -*- # -- from ase.visualize import view view(${1:atoms})
# -*- mode: snippet -*- # -- from ase.io import write write('$1.png', ${2:atoms}, show_unit_cell=${3:2})
3.3 python snippets
# -*- mode: snippet -*- # -- import numpy as np
# -*- mode: snippet -*- # -- import matplotlib.pyplot as plt
# -*- mode: snippet -*- # -- from ase import Atom, Atoms
# -*- mode: snippet -*- # -- np.array($0)
# -*- mode: snippet -*- # -- plt.plot($1, $2)
# -*- mode: snippet -*- # -- plt.xlabel($1)
# -*- mode: snippet -*- # -- plt.ylabel($1)
# -*- mode: snippet -*- # -- plt.legend($1)
# -*- mode: snippet -*- # -- from jasp import *
Copyright (C) 2014 by John Kitchin. See the License for information about copying.
Org-mode version = 8.2.5h