Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/doomemacs/snippets
The Doom Emacs snippets library
https://github.com/doomemacs/snippets
doom-emacs emacs snippets yasnippet
Last synced: 1 day ago
JSON representation
The Doom Emacs snippets library
- Host: GitHub
- URL: https://github.com/doomemacs/snippets
- Owner: doomemacs
- License: mit
- Created: 2015-06-06T11:07:54.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-08-09T21:32:01.000Z (5 months ago)
- Last Synced: 2024-09-21T04:02:12.498Z (4 months ago)
- Topics: doom-emacs, emacs, snippets, yasnippet
- Language: YASnippet
- Homepage:
- Size: 959 KB
- Stars: 290
- Watchers: 10
- Forks: 96
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![Release tag](https://img.shields.io/github/tag/doomemacs/snippets.svg?label=release&style=flat-square)
[![Discord Server](https://img.shields.io/discord/406534637242810369?color=738adb&label=Discord&logo=discord&logoColor=white&style=flat-square)](https://doomemacs.org/discord)
[![Discourse server](https://img.shields.io/discourse/users?server=https%3A%2F%2Fdiscourse.doomemacs.org&logo=discourse&label=Discourse&style=flat-square&color=9cf)](https://discourse.doomemacs.org)# Doom Emacs' Snippet Library
This repository contains the [yasnippet] snippets library for [Doom Emacs].
It also exposes a small API to assist in writing your own snippets, including
`doom-snippets-expand` for easily writing snippet aliases, and snippets for the
project/framework-specific minor modes available to [Doom Emacs] users.## Install
+ [Doom Emacs] users need only enable the `:editor snippets` module.
+ This package isn't available on MELPA yet.
+ Otherwise, clone this repo somewhere local and use:``` emacs-lisp
(use-package doom-snippets
:load-path "path/to/emacs-snippets"
:after yasnippet)
```
+ [straight.el](https://github.com/raxod502/straight.el) users can use:
``` emacs-lisp
(use-package doom-snippets
:after yasnippet
:straight (doom-snippets :type git :host github :repo "doomemacs/snippets" :files ("*.el" "*")))
```## Snippets API
This library exposes a small API to assist you in writing your own snippets.
This is not an exhaustive list, but are the most useful.### `doom-snippets-expand PROPERTY VALUE &optional MODE`
This is primarily used for creating snippet aliases. A snippet alias is a snippet
that will expand another snippet when used. e.g.**In `js-mode/class`:**
```yasnippet
# name: class
# --
class ${1:Name} {
$0
}
```**In `js-mode/cl`:**
```yasnippet
# name: class
# key: cl
# type: command
# --
(doom-snippets-expand :name "class")
```### `doom-snippets-format FORMAT &optional DEFAULT TRIM`
Returns `FORMAT`, which is a format string with a custom spec:
| spec | description |
|------|--------------------------------------------------------------------|
| %s | The contents of your current selection (`yas-selected-text`) |
| %! | A newline, if your current selection spans more than a single line |
| %> | A newline, unless the point is at EOL |+ If `yas-selected-text` is empty, `DEFAULT` is used.
+ If `TRIM` is non-nil, whitespace on the ends of `yas-selected-text` is
trimmed.
An example of its use:```yasnippet
# -*- mode: snippet -*-
# name: while ... { ... }
# key: while
# --
while ${1:true} { `(doom-snippets-format "%n%s%n")`$0 }
```If the selection consists of a single line, this will expand to:
``` javascript
while true { console.log("Hello world")| }
```If it consists of multiple lines, it will expand to:
``` javascript
while true {
console.log("Hello")
console.log("world")|
}
````PROPERTY` can be `:uuid`, `:name`, `:key` or `:file`, and `MODE` restricts the
snippet search to a certain snippet table (by major mode). It isn't wise to use
`MODE` to reference snippets for other major modes, because it will only see
snippets that yasnippet have already loaded (and it lazy loads each table).### `doom-snippets-without-trigger &rest BODY`
Performs `BODY` after moving the point to the start of the trigger keyword.
Without this, tests like `bolp` would meaninglessly fail because the cursor is
always in front of the word that triggered this snippet.``` yasnippet
# -*- mode: snippet -*-
# name: .to_string()
# key: ts
# condition: (doom-snippets-without-trigger (eq (char-before) ?.))
# --
to_string()
```### `doom-snippets-enable-short-helpers`
If this variable is non-nil, this package will define the following shortcut
function aliases for your convenience:+ `!%!` = `(doom-snippets-format "%n%s%n")`
+ `!%` = `(doom-snippets-format "%n%s")`
+ `%$` = `(doom-snippets-format "%>")`
+ `(%expand ...)` = `(doom-snippets-expand ...)`
+ `(%format ...)` = `(doom-snippets-format ...)`
+ `(%without-trigger ...)` = `(doom-snippets-without-trigger ...)`[yasnippet]: https://github.com/capitaomorte/yasnippet
[Doom Emacs]: https://github.com/doomemacs/doomemacs