Skip to content

doomemacs/snippets

Folders and files

NameName
Last commit message
Last commit date
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Aug 6, 2022
Oct 26, 2019
Mar 26, 2020
Sep 7, 2023
Nov 1, 2019
Oct 26, 2019
Oct 26, 2019
Aug 9, 2024
Nov 1, 2019
Jun 7, 2024
Sep 10, 2020
Sep 10, 2020
Nov 1, 2019
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Sep 8, 2022
Nov 1, 2019
Mar 24, 2020
Oct 26, 2019
Jan 23, 2020
Sep 16, 2023
Jan 10, 2020
Apr 4, 2024
Oct 26, 2019
Oct 26, 2019
Sep 16, 2023
Sep 16, 2023
Oct 26, 2019
Jul 6, 2021
Oct 6, 2021
Oct 26, 2019
Jun 21, 2022
Sep 16, 2023
Nov 1, 2019
May 28, 2021
Jan 10, 2020
Nov 1, 2019
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Jun 12, 2020
May 6, 2020
Feb 13, 2024
Oct 26, 2019
Oct 26, 2019
Nov 1, 2019
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Nov 1, 2019
Oct 26, 2019
Feb 19, 2023
Oct 26, 2019
Dec 27, 2019
Jun 22, 2022
Sep 16, 2023
Nov 15, 2020
Oct 26, 2019
Oct 26, 2019
Oct 26, 2019
Oct 12, 2020
Aug 25, 2021
Oct 26, 2019
Jul 30, 2021
Oct 26, 2019
Apr 22, 2020
Nov 24, 2021
Oct 26, 2019
Oct 26, 2019
Nov 1, 2019
Oct 26, 2019
Oct 26, 2019
Jan 23, 2020
Jan 29, 2020
Nov 1, 2019
Oct 26, 2019
Oct 26, 2019
Jul 27, 2021
Feb 13, 2021
Oct 26, 2019
Aug 7, 2022
Aug 7, 2022
Jan 1, 2016
Jul 14, 2019
Apr 4, 2024
Feb 19, 2023
Jul 22, 2019
Apr 4, 2024

Repository files navigation

Release tag Discord Server Discourse server

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:

    (use-package doom-snippets
      :load-path "path/to/emacs-snippets"
      :after yasnippet)
  • straight.el users can use:

(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:

# name: class
# --
class ${1:Name} {
    $0
}

In js-mode/cl:

# 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:

# -*- 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:

while true { console.log("Hello world")| }

If it consists of multiple lines, it will expand to:

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.

# -*- 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 ...)