The SRecode system is made up of several layers which work together to generate code.
The template layer provides a way to write, and compile templates. The template layer is the scheme used to insert text into an Emacs buffer.
The SRecode template layer is more advanced than other modes like the
Emacs packages skeleton
or tempo
in that it allows
multiple layers of templates to be created with the same names. This
means that SRecode can provide a wide range of templates, and users
can override only the small sections they want, instead of either
accepting someone else’s template, or writing large new templates of
their own.
Templates are written in .srt files. You can learn how to author new .srt files Template Writing.
While the template system was designed for SRecode based applications it can also be used independently for simple template insertion during typical coding.
Once templates have been written, a scheme for loading and selecting templates is needed. The template manager has a loader for finding template files, and determining which templates are relevant to the current buffer. Template files are sorted by priority, with user templates being found first, and system level default templates last. Templates are also sorted by application. Each application has its own templates, and are kept separate from the generic templates.
Dictionaries contain values associated with variable. Variables are
used in macros in a template. Variables are what allows a generic
template such as a function to be made specific, such as a function
named foo. The value of a variable can be one of three things; a
string, a list of more dictionaries, or a special
srecode-dictionary-compound-value
object subclass. See
Variables for more.
The template insertion layer involves extensions to the basic template layer. A wide range of custom variables are available for mixing derived data as macros into the plain text of a template.
In addition, templates can be declared with arguments. These arguments represent predetermined sets of dictionary values, such as features of the current file name, user name, time, etc.
Some arguments are major-mode specific, such as the :el
or
:cpp
arguments.
A context can be provided for templates in a file. This helps
auto-selection of templates by name, or allows templates in different
contexts to have the same name. Some standard contexts are
file
, declaration
, and classdecl
.
A context can be automatically derived as well based on the parsing state from Semantic. See (semantic)Semantic Manual.
Commands that do a particular user task which involves also writing
Emacs Lisp code. Applications are at the top layer. These
applications have their own template files and logic needed to fill in
dictionaries or position a cursor. SRecode comes with an example
srecode-document
application for creating comments for Semantic
tags. The CEDET application EDE has a project type that is an
SRecode application.
If the variable srecode-insert-ask-variable-method
is set to
’field, then variables that would normally ask a question, will
instead create “fields” in the buffer. A field-editing layer
provides simple interaction through the fields. Typing in a field
will cause all variable locations that are the same to edit at the
same time. Pressing TAB on a field will move you to the
next field.