summaryrefslogtreecommitdiff
path: root/elpa/llama-0.6.2/README.org
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2025-04-01 20:27:39 +0100
committerthing1 <thing1@seacrossedlovers.xyz>2025-04-01 20:27:39 +0100
commitd3a5ddb4189ef7c04df0cc47a0f9642b23292d2d (patch)
tree14264483e4d2e6481abc74feea6d9cbcae3666d1 /elpa/llama-0.6.2/README.org
parentdabaff03992c102c395314629f63ce93a2c1bd3a (diff)
added magit and other general configs
Diffstat (limited to 'elpa/llama-0.6.2/README.org')
-rw-r--r--elpa/llama-0.6.2/README.org68
1 files changed, 68 insertions, 0 deletions
diff --git a/elpa/llama-0.6.2/README.org b/elpa/llama-0.6.2/README.org
new file mode 100644
index 0000000..42134f2
--- /dev/null
+++ b/elpa/llama-0.6.2/README.org
@@ -0,0 +1,68 @@
+* Llama — Compact syntax for short lambda
+
+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:
+
+#+begin_src emacs-lisp
+ (lambda (a &optional _ c &rest d)
+ (foo a (bar c) d))
+#+end_src
+
+you can use this macro and write:
+
+#+begin_src emacs-lisp
+ (##foo %1 (bar &3) &*)
+#+end_src
+
+which expands to:
+
+#+begin_src emacs-lisp
+ (lambda (%1 &optional _&2 &3 &rest &*)
+ (foo %1 (bar &3) &*))
+#+end_src
+
+Unused trailing arguments and mandatory unused arguments at the border
+between mandatory and optional arguments are also supported:
+
+#+begin_src emacs-lisp
+ (##list %1 _%3 &5 _&6)
+#+end_src
+
+becomes:
+
+#+begin_src emacs-lisp
+ (lambda (%1 _%2 _%3 &optional _&4 &5 _&6)
+ (list %1 &5))
+#+end_src
+
+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~ to highlight ~##~ and its special
+arguments.