summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Nicolodi <daniele@grinta.net>2020-11-14 18:33:41 +0100
committerKyle Meyer <kyle@kyleam.com>2020-11-27 00:05:57 -0500
commitb2d38a822d2269df02b4ccf39116f8f7001e8e69 (patch)
tree1aeda153278121d3a64296b29ffa3fbfa5dd4a72
parent9a154910ed1dd0bf0407759dde70f41c9b03f0d6 (diff)
downloadorg-mode-b2d38a822d2269df02b4ccf39116f8f7001e8e69.tar.gz
doc/org-manual.org: Extend table formulas Lisp form documentation
* doc/org-manual.org (Emacs Lisp forms as formulas): Be more explicit about how fields are interpolated into the Lisp forms, clarify the use of mode flags, and add a couple more examples.
-rw-r--r--doc/org-manual.org64
1 files changed, 40 insertions, 24 deletions
diff --git a/doc/org-manual.org b/doc/org-manual.org
index 2f7f5f8..97018d0 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -2178,38 +2178,54 @@ It is also possible to write a formula in Emacs Lisp. This can be
useful for string manipulation and control structures, if Calc's
functionality is not enough.
-If a formula starts with a single-quote followed by an opening
-parenthesis, then it is evaluated as a Lisp form. The evaluation
-should return either a string or a number. Just as with Calc
-formulas, you can specify modes and a ~printf~ format after
-a semicolon.
+A formula is evaluated as a Lisp form when it starts with a
+single-quote followed by an opening parenthesis. Cell table
+references are interpolated into the Lisp form before execution. The
+evaluation should return either a string or a number. Evaluation
+modes and a ~printf~ format used to render the returned values can be
+specified after a semicolon.
-With Emacs Lisp forms, you need to be conscious about the way field
-references are interpolated into the form. By default, a reference is
-interpolated as a Lisp string (in double-quotes) containing the field.
-If you provide the =N= mode switch, all referenced elements are
-numbers---non-number fields will be zero---and interpolated as Lisp
-numbers, without quotes. If you provide the =L= flag, all fields are
-interpolated literally, without quotes. For example, if you want a
-reference to be interpreted as a string by the Lisp form, enclose the
-reference operator itself in double-quotes, like ="$3"=. Ranges are
-inserted as space-separated fields, so you can embed them in list or
-vector syntax.
+By default, references are interpolated as literal Lisp strings: the
+field content is replaced in the Lisp form stripped of leading and
+trailing white space and surrounded in double-quotes. For example:
-Here are a few examples---note how the =N= mode is used when we do
-computations in Lisp:
+: '(concat $1 $2)
-- ='(concat (substring $1 1 2) (substring $1 0 1) (substring $1 2))= ::
+#+texinfo: @noindent
+concatenates the content of columns 1 and column 2.
+
+When the =N= flag is used, all referenced elements are parsed as
+numbers and interpolated as Lisp numbers, without quotes. Fields that
+cannot be parsed as numbers are interpolated as zeros. For example:
+
+: '(+ $1 $2);N
+
+#+texinfo: @noindent
+adds columns 1 and 2, equivalent to Calc's =$1+$2=. Ranges are
+inserted as space-separated fields, so they can be embedded in list or
+vector syntax. For example:
- Swap the first two characters of the content of column 1.
+: '(apply '+ '($1..$4));N
-- ='(+ $1 $2);N= ::
+#+texinfo: @noindent
+computes the sum of columns 1 to 4, like Calc's =vsum($1..$4)=.
+
+When the =L= flag is used, all fields are interpolated literally: the
+cell content is replaced in the Lisp form stripped of leading and
+trailing white space and without quotes. If a reference is intended
+to be interpreted as a string by the Lisp form, the reference operator
+itself should be enclosed in double-quotes, like ="$3"=. The =L= flag
+is useful when strings and numbers are used in the same Lisp form. For
+example:
- Add columns 1 and 2, equivalent to Calc's =$1+$2=.
+: '(substring "$1" $2 $3);L
-- ='(apply '+ '($1..$4));N= ::
+#+texinfo: @noindent
+extracts the part of the string in column 1 between the character
+positions specified in the integers in column 2 and 3 and it is easier
+to read than the equivalent:
- Compute the sum of columns 1 to 4, like Calc's =vsum($1..$4)=.
+: '(substring $1 (string-to-number $2) (string-to-number $3))
*** Durations and time values
:PROPERTIES: