File: llama.el.html
This package implements a macro named ##, which provides a compact way
to write short lambda expressions.
The signature of the macro is (## FN &rest BODY) and it expands to a
lambda expression, which calls the function FN with the arguments BODY
and returns the value of that. The arguments of the lambda expression
are derived from symbols found in BODY.
Each symbol from %1 through %9, which appears in an unquoted part
of BODY, specifies a mandatory argument. Each symbol from &1 through
&9, which appears in an unquoted part of BODY, specifies an optional
argument. The symbol &* specifies extra (&rest) arguments.
The shorter symbol % can be used instead of %1, but using both in
the same expression is not allowed. Likewise & can be used instead
of &1. These shorthands are not recognized in function position.
To support binding forms that use a vector as VARLIST (such as -let
from the dash package), argument symbols are also detected inside of
vectors.
The space between ## and FN can be omitted because ## is read-syntax
for the symbol whose name is the empty string. If you prefer you can
place a space there anyway, and if you prefer to not use this somewhat
magical symbol at all, you can instead use the alternative name llama.
Instead of:
(lambda (a &optional _ c &rest d)
(foo a (bar c) d))
you can use this macro and write:
(##foo %1 (bar &3) &*)
which expands to:
(lambda (%1 &optional _&2 &3 &rest &*)
(foo %1 (bar &3) &*))
Unused trailing arguments and mandatory unused arguments at the border between mandatory and optional arguments are also supported:
(##list %1 _%3 &5 _&6)
becomes:
(lambda (%1 _%2 _%3 &optional _&4 &5 _&6)
(list %1 &5))
Note how _%3 and _&6 are removed from the body, because their names
begin with an underscore. Also note that _&4 is optional, unlike the
explicitly specified _%3.
Consider enabling llama-fontify-mode(var)/llama-fontify-mode(fun) to highlight ## and its
special arguments.
Defined variables (2)
llama-fontify-mode | Non-nil if Llama-Fontify mode is enabled. |
llama-fontify-mode-hook | Hook run after entering or leaving ‘llama-fontify-mode’. |
Defined functions (13)
## | (FN &rest BODY) |
all-completions@llama | (FN STR TABLE &rest REST) |
elisp--expect-function-p@llama | (FN POS) |
elisp-mode-syntax-propertize@llama | (START END) |
lisp--el-match-keyword@llama | (LIMIT) |
llama | (FN &rest BODY) |
llama--collect | (EXPR ARGS &optional FNPOS BACKQUOTED UNQUOTE) |
llama--fontify | (EXPR &optional FNPOS BACKQUOTED TOP) |
llama--left-apply-partially | (FN &rest ARGS) |
llama--match-and-fontify | (RE END) |
llama--maybe-face | (FACE) |
llama--right-apply-partially | (FN &rest ARGS) |
llama-fontify-mode | (&optional ARG) |
Defined faces (5)
llama-##-macro | Face used for the name of the ‘##’ macro. |
llama-deleted-argument | Face used for deleted arguments ‘_%1’...‘_%9’, ‘_&1’...‘_&9’ and ‘_&*’. This face is used in addition to one of llama’s other argument faces. Unlike implicit unused arguments (which do not appear in the function body), these arguments are deleted from the function body during macro expansion, and the looks of this face should hint at that. |
llama-llama-macro | Face used for the name of the ‘llama’ macro. |
llama-mandatory-argument | Face used for mandatory arguments ‘%1’ through ‘%9’ and ‘%’. |
llama-optional-argument | Face used for optional arguments ‘&1’ through ‘&9’, ‘&’ and ‘&*’. |