#+TITLE:   editor/file-templates
#+DATE:    February 11, 2017
#+SINCE:   v2.0
#+STARTUP: inlineimages

* Table of Contents :TOC_2:noexport:
- [[#description][Description]]
  - [[#module-flags][Module Flags]]
  - [[#plugins][Plugins]]
- [[#prerequisites][Prerequisites]]
- [[#usage][Usage]]
  - [[#inserting-oss-licenses][Inserting OSS licenses]]
- [[#configuration][Configuration]]
  - [[#registering-a-new-file-template][Registering a new file template]]
  - [[#changing-existing-file-templates][Changing existing file templates]]
  - [[#adding-new-oss-licenses][Adding new OSS licenses]]
- [[#troubleshooting][Troubleshooting]]
- [[#appendix][Appendix]]
  - [[#api][API]]
  - [[#commands][Commands]]
  - [[#variables][Variables]]

* Description
This module adds file templates for blank files, powered by yasnippet.

** Module Flags
This module provides no flags.

** Plugins
This module installs no plugins.

* Prerequisites
This module has no prerequisites.

* Usage
File templates are automatically expanded when opening empty files.

They are also regular yasnippet snippets, which can be expanded by typing their
trigger and pressing =TAB=. By convention, the triggers for file templates are
prefixed with two underscores ~__~.

** Inserting OSS licenses
A special command is available for inserting software licenses: ~M-x
+file-templates/insert-license~.

#+begin_quote
Licenses with a ~-bp~ suffix are boilerplate templates; shorter versions meant
for comment headers in code.
#+end_quote

* Configuration
** Registering a new file template
Look into the documentation of ~set-file-template!~ and ~set-file-templates!~.
** Changing existing file templates
Simply register a new template (using ~set-file-template!~) that matches the same
file. The new template would be pushed to the top of ~+file-template-alist~ and
thus would take priority while searching for a template to insert.
** Adding new OSS licenses
The ~+file-templates/insert-license~ command searches for snippets under
~text-mode~ that are named ~__license-ABC~, where ABC is the short name of the
license. e.g. ~__license-mit~.

So long as these files exist, ~+file-templates/insert-license~ will recognize
them.

* Troubleshooting
If a file template isn't expanding where you expect it to, run ~M-x
+file-templates/debug~. This will report to you what file template rule would
apply for the correct file.

* Appendix
** API
+ ~set-file-template! PRED &rest PLIST~
+ ~set-file-templates! &rest TEMPLATES~

** Commands
+ ~+file-templates/insert-license~
+ ~+file-templates/debug~

** Variables
+ ~+file-templates-dir~
+ ~+file-templates-default-trigger~
+ ~+file-templates-alist~
