SMIE is meant to be a one-stop shop for structural navigation and
various other features which rely on the syntactic structure of code, in
particular automatic indentation. The main entry point is
smie-setup
which is a function typically called while setting
up a major mode.
Setup SMIE navigation and indentation.
grammar is a grammar table generated by smie-prec2->grammar
.
rules-function is a set of indentation rules for use on
smie-rules-function
.
keywords are additional arguments, which can include the following
keywords:
:forward-token
fun: Specify the forward lexer to use.
:backward-token
fun: Specify the backward lexer to use.
Calling this function is sufficient to make commands such as
forward-sexp
, backward-sexp
, and transpose-sexps
be
able to properly handle structural elements other than just the paired
parentheses already handled by syntax tables. For example, if the
provided grammar is precise enough, transpose-sexps
can correctly
transpose the two arguments of a +
operator, taking into account
the precedence rules of the language.
Calling smie-setup
is also sufficient to make TAB
indentation work in the expected way, extends
blink-matching-paren
to apply to elements like
begin...end
, and provides some commands that you can bind in
the major mode keymap.
This command closes the most recently opened (and not yet closed) block.
This command is like down-list
but it also pays attention to
nesting of tokens other than parentheses, such as begin...end
.