elisp: SMIE setup

 
 22.7.1.1 SMIE Setup and Features
 ................................
 
 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.
 
  -- Function: smie-setup grammar rules-function &rest keywords
      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.
 
  -- Command: smie-close-block
      This command closes the most recently opened (and not yet closed)
      block.
 
  -- Command: smie-down-list &optional arg
      This command is like ‘down-list’ but it also pays attention to
      nesting of tokens other than parentheses, such as ‘begin...end’.