Yankpad
Note: the original content of this post has been edited on
.
Text snippets can help write code and test faster and, over time, I started appreciating and using Yasnippet.
A few days ago I came across Yankpad, an Emacs lisp package for managing text snippets which is quite interesting. The package is available on MELPA.
Yankpad is based on OrgMode: snippets are defined in a OrgMode file
(yankpad.org
, by default), in which Level 1 headings are used to
group snippets and Level 2 headings are used to define a snippet. In
this way all snippets are defined in a single, nicely structured,
file1.
First level headers of the Yankpad can be associated to major modes,
in which case the corresponding snippets are made available in buffers
visited in the major mode. All snippets belonging to a level-1 heading
can be enabled manually by invoking yankpad-set-category
.
If used in conjunction with Yasnippet, snippets can use the syntax and expansion capabilities provided by this package, which make snippets defined with Yankpad much more useful.
For instance the following portion of my Yankpad defines a snippet
Cash Withdrawal, which is available in any buffer in
hledger-mode
. The snippet uses Emacs-lisp to insert the current date
(formatted as YYYY-MM-DD, e.g., 2018-10-20) and sets two tab stops
($1
and $0
):
* hledger-mode ** cw: Cash Withdrawal :src: #+BEGIN_SRC `(format-time-string "%Y-%2m-%2d" (current-time))` Me cash $1 bank $0 #+END_SRC
The example shows two other nice features of Yankpad, namely,
shortcuts and literate programming styled snippets. In fact, the cw
string at the beginning of the heading allows to invoke snippet
expansion by writing cw
in the buffer and then call
yankpad-expand
. The :src:
tag specifies that the snippet is
defined in a source code drawer.
If you intend to use Yankpad with Yasnippet make sure you enable
yas-mode
globally. This is, for instance, a possible setup:
(require 'yasnippet nil t) (if (featurep 'yasnippet) (yas-global-mode 1)) (require 'yankpad nil t) (global-set-key "\C-x?" 'yankpad-insert) (global-set-key "\C-x/" 'yankpad-expand)
Have a look at the documentation and the repository for more details.
A side-effect of using an Org Mode file to define snippets is that your snippets can be more easily published. This is, for instance, an example yankpad file.
Footnotes:
Yankpad also defines features to separate the definition of snippets in different files.