mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-08-25 19:02:52 +00:00
Merge branch 'master' of git+ssh://repo.or.cz/srv/git/org-mode
This commit is contained in:
commit
c0eb6cfa88
150
doc/org.texi
150
doc/org.texi
|
@ -11144,29 +11144,23 @@ of tangled code files.
|
||||||
@cindex code block, evaluating
|
@cindex code block, evaluating
|
||||||
@cindex source code, evaluating
|
@cindex source code, evaluating
|
||||||
|
|
||||||
@quotation
|
Code blocks can be evaluated@footnote{Whenever code is evaluated there is a
|
||||||
Whenever code is evaluated there is a potential for that code to do harm.
|
potential for that code to do harm. Org-mode provides a number of safeguards
|
||||||
Org-mode provides a number of safeguards to ensure that it only evaluates
|
to ensure that it only evaluates code with explicit confirmation from the
|
||||||
code with explicit confirmation from the user. For information on these
|
user. For information on these safeguards (and on how to disable them) see
|
||||||
safeguards (and on how to disable them) see @ref{Code evaluation security}.
|
@ref{Code evaluation security}.} and the results placed in the Org-mode
|
||||||
@end quotation
|
buffer. By default, evaluation is only turned on for @code{emacs-lisp} code
|
||||||
|
blocks, however support exists for evaluating blocks in many languages. See
|
||||||
Code blocks can be evaluated and the results placed in the Org-mode buffer.
|
|
||||||
By default, evaluation is only turned on for @code{emacs-lisp} code blocks,
|
|
||||||
however support exists for evaluating blocks in many languages. See
|
|
||||||
@ref{Languages} for a list of supported languages. See @ref{Structure of
|
@ref{Languages} for a list of supported languages. See @ref{Structure of
|
||||||
code blocks} for information on the syntax used to define a code block.
|
code blocks} for information on the syntax used to define a code block.
|
||||||
|
|
||||||
@kindex C-c C-c
|
@kindex C-c C-c
|
||||||
There are a number of ways to evaluate code blocks. The simplest is to
|
There are a number of ways to evaluate code blocks. The simplest is to press
|
||||||
press @kbd{C-c C-c} or @kbd{C-c C-v e} with the point on a code block. This
|
@kbd{C-c C-c} or @kbd{C-c C-v e} with the point on a code block@footnote{The
|
||||||
will call the @code{org-babel-execute-src-block} function to evaluate the
|
@code{org-babel-no-eval-on-ctrl-c-ctrl-c} variable can be used to remove code
|
||||||
block and insert its results into the Org-mode buffer.
|
evaluation from the @kbd{C-c C-c} key binding.}. This will call the
|
||||||
|
@code{org-babel-execute-src-block} function to evaluate the block and insert
|
||||||
@quotation
|
its results into the Org-mode buffer.
|
||||||
The @code{org-babel-no-eval-on-ctrl-c-ctrl-c} variable can be used to remove
|
|
||||||
code evaluation from the @kbd{C-c C-c} key binding.
|
|
||||||
@end quotation
|
|
||||||
|
|
||||||
It is also possible to evaluate named code blocks from anywhere in an
|
It is also possible to evaluate named code blocks from anywhere in an
|
||||||
Org-mode buffer or an Org-mode table. @code{#+call} (or synonymously
|
Org-mode buffer or an Org-mode table. @code{#+call} (or synonymously
|
||||||
|
@ -11223,7 +11217,7 @@ Code blocks in the following languages are supported.
|
||||||
@multitable @columnfractions 0.28 0.3 0.22 0.2
|
@multitable @columnfractions 0.28 0.3 0.22 0.2
|
||||||
@item @b{Language} @tab @b{Identifier} @tab @b{Language} @tab @b{Identifier}
|
@item @b{Language} @tab @b{Identifier} @tab @b{Language} @tab @b{Identifier}
|
||||||
@item Asymptote @tab asymptote @tab C @tab C
|
@item Asymptote @tab asymptote @tab C @tab C
|
||||||
@item C @tab C++ @tab Clojure @tab clojure
|
@item C++ @tab C++ @tab Clojure @tab clojure
|
||||||
@item css @tab css @tab ditaa @tab ditaa
|
@item css @tab css @tab ditaa @tab ditaa
|
||||||
@item Graphviz @tab dot @tab Emacs Lisp @tab emacs-lisp
|
@item Graphviz @tab dot @tab Emacs Lisp @tab emacs-lisp
|
||||||
@item gnuplot @tab gnuplot @tab Haskell @tab haskell
|
@item gnuplot @tab gnuplot @tab Haskell @tab haskell
|
||||||
|
@ -11237,7 +11231,7 @@ Code blocks in the following languages are supported.
|
||||||
@item Sqlite @tab sqlite
|
@item Sqlite @tab sqlite
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
Language specific documentation is available for some languages. If
|
Language-specific documentation is available for some languages. If
|
||||||
available, it can be found at
|
available, it can be found at
|
||||||
@uref{http://orgmode.org/worg/org-contrib/babel/languages}.
|
@uref{http://orgmode.org/worg/org-contrib/babel/languages}.
|
||||||
|
|
||||||
|
@ -11451,19 +11445,14 @@ The following header arguments are defined:
|
||||||
|
|
||||||
@node var, results, Specific header arguments, Specific header arguments
|
@node var, results, Specific header arguments, Specific header arguments
|
||||||
@subsubsection @code{:var}
|
@subsubsection @code{:var}
|
||||||
The @code{:var} header argument is used to pass arguments to
|
The @code{:var} header argument is used to pass arguments to code blocks.
|
||||||
code blocks. The specifics of how arguments are included
|
The specifics of how arguments are included in a code block vary by language;
|
||||||
in a code block vary by language; these are
|
these are addressed in the language-specific documentation. However, the
|
||||||
addressed in the language-specific documentation. However, the
|
syntax used to specify arguments is the same across all languages. The
|
||||||
syntax used to specify arguments is the same across all
|
values passed to arguments can be literal values, values from org-mode tables
|
||||||
languages. The values passed to arguments can be
|
and literal example blocks, or the results of other code blocks.
|
||||||
@itemize @bullet
|
|
||||||
@item literal values
|
|
||||||
@item values from org-mode tables
|
|
||||||
@item the results of other code blocks
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
These values can be indexed in a manner similar to arrays---see the argument
|
These values can be indexed in a manner similar to arrays---see the
|
||||||
``indexable variable values'' heading below.
|
``indexable variable values'' heading below.
|
||||||
|
|
||||||
The following syntax is used to pass arguments to code blocks using the
|
The following syntax is used to pass arguments to code blocks using the
|
||||||
|
@ -11546,43 +11535,90 @@ following the source name.
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@subsubheading Indexable variable values
|
@subsubheading Indexable variable values
|
||||||
It is possible to assign a portion of a value to a variable in a source
|
It is possible to reference portions of variable values by ``indexing'' into
|
||||||
block. The following example assigns the second and third rows of the table
|
the variables. Indexes are 0 based with negative values counting back from
|
||||||
|
the end. If an index is separated by @code{,}s then each subsequent section
|
||||||
|
will index into the next deepest nesting or dimension of the value. The
|
||||||
|
following example assigns the last cell of the first row the table
|
||||||
@code{example-table} to the variable @code{data}:
|
@code{example-table} to the variable @code{data}:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
:var data=example-table[1:2]
|
#+results: example-table
|
||||||
|
| 1 | a |
|
||||||
|
| 2 | b |
|
||||||
|
| 3 | c |
|
||||||
|
| 4 | d |
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp :var data=example-table[0,-1]
|
||||||
|
data
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+results:
|
||||||
|
: a
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Note: ranges are indexed using the @code{:} operator.
|
Ranges of variable values can be referenced using two integers separated by a
|
||||||
|
@code{:}, in which case the entire inclusive range is referenced. For
|
||||||
Note: indices are 0 based.
|
example the following assigns the middle three rows of @code{example-table}
|
||||||
|
to @code{data}.
|
||||||
The following example assigns the second column of the first row of
|
|
||||||
@code{example-table} to @code{data}:
|
|
||||||
|
|
||||||
@example
|
@example
|
||||||
:var data=example-table[0,1]
|
#+results: example-table
|
||||||
|
| 1 | a |
|
||||||
|
| 2 | b |
|
||||||
|
| 3 | c |
|
||||||
|
| 4 | d |
|
||||||
|
| 5 | 3 |
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp :var data=example-table[1:3]
|
||||||
|
data
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+results:
|
||||||
|
| 2 | b |
|
||||||
|
| 3 | c |
|
||||||
|
| 4 | d |
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
It is possible to index into the results of code blocks as well as
|
Additionally, an empty index, or the single character @code{*}, are both
|
||||||
tables. Any number of dimensions can be indexed. Dimensions are separated
|
interpreted to mean the entire range and as such are equivalent to
|
||||||
from one another by commas.
|
@code{0:-1}, as shown in the following example in which the entire first
|
||||||
|
column is referenced.
|
||||||
|
|
||||||
For more information on indexing behavior see the documentation for the
|
@example
|
||||||
@code{org-babel-ref-index-list} function, provided below.
|
#+results: example-table
|
||||||
|
| 1 | a |
|
||||||
|
| 2 | b |
|
||||||
|
| 3 | c |
|
||||||
|
| 4 | d |
|
||||||
|
|
||||||
@deffn
|
#+begin_src emacs-lisp :var data=example-table[,0]
|
||||||
org-babel-ref-index-list is a Lisp function in `org-babel-ref.el'.
|
data
|
||||||
|
#+end_src
|
||||||
|
|
||||||
(org-babel-ref-index-list index lis)
|
#+results:
|
||||||
|
| 1 | 2 | 3 | 4 |
|
||||||
|
@end example
|
||||||
|
|
||||||
Return the subset of LIS indexed by INDEX. If INDEX is
|
It is possible to index into the results of code blocks as well as tables.
|
||||||
separated by ,s then each PORTION is assumed to index into the
|
Any number of dimensions can be indexed. Dimensions are separated from one
|
||||||
next deepest nesting or dimension. A valid PORTION can consist
|
another by commas, as shown in the following example.
|
||||||
of either an integer index, or two integers separated by a : in
|
|
||||||
which case the entire range is returned.
|
@example
|
||||||
@end deffn
|
#+source: 3D
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
'(((1 2 3) (4 5 6) (7 8 9))
|
||||||
|
((10 11 12) (13 14 15) (16 17 18))
|
||||||
|
((19 20 21) (22 23 24) (25 26 27)))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp :var data=3D[1,,1]
|
||||||
|
data
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+results:
|
||||||
|
| 11 | 14 | 17 |
|
||||||
|
@end example
|
||||||
|
|
||||||
@node results, file, var, Specific header arguments
|
@node results, file, var, Specific header arguments
|
||||||
@subsubsection @code{:results}
|
@subsubsection @code{:results}
|
||||||
|
|
|
@ -110,7 +110,11 @@ Convert an elisp value, VAR, into a string of python source code
|
||||||
specifying a variable of the same value."
|
specifying a variable of the same value."
|
||||||
(if (listp var)
|
(if (listp var)
|
||||||
(concat "[" (mapconcat #'org-babel-python-var-to-python var ", ") "]")
|
(concat "[" (mapconcat #'org-babel-python-var-to-python var ", ") "]")
|
||||||
(if (equal var 'hline) "None" (format "%S" var))))
|
(if (equal var 'hline)
|
||||||
|
"None"
|
||||||
|
(format
|
||||||
|
(if (and (stringp var) (string-match "[\n\r]" var)) "\"\"%S\"\"" "%S")
|
||||||
|
var))))
|
||||||
|
|
||||||
(defun org-babel-python-table-or-string (results)
|
(defun org-babel-python-table-or-string (results)
|
||||||
"Convert RESULTS into an appropriate elisp value.
|
"Convert RESULTS into an appropriate elisp value.
|
||||||
|
|
|
@ -177,28 +177,36 @@ return nil."
|
||||||
|
|
||||||
(defun org-babel-ref-index-list (index lis)
|
(defun org-babel-ref-index-list (index lis)
|
||||||
"Return the subset of LIS indexed by INDEX.
|
"Return the subset of LIS indexed by INDEX.
|
||||||
If INDEX is separated by ,s then each PORTION is assumed to index
|
|
||||||
into the next deepest nesting or dimension. A valid PORTION can
|
Indices are 0 based and negative indices count from the end of
|
||||||
consist of either an integer index, or two integers separated by
|
LIS, so 0 references the first element of LIS and -1 references
|
||||||
a : in which case the entire range is returned."
|
the last. If INDEX is separated by \",\"s then each \"portion\"
|
||||||
(if (string-match "^,?\\([^,]+\\)" index)
|
is assumed to index into the next deepest nesting or dimension.
|
||||||
(let ((length (length lis))
|
|
||||||
|
A valid \"portion\" can consist of either an integer index, two
|
||||||
|
integers separated by a \":\" in which case the entire range is
|
||||||
|
returned, or an empty string or \"*\" both of which are
|
||||||
|
interpreted to mean the entire range and as such are equivalent
|
||||||
|
to \"0:-1\"."
|
||||||
|
(if (and (> (length index) 0) (string-match "^\\([^,]*\\),?" index))
|
||||||
|
(let ((ind-re "\\(\\([-[:digit:]]+\\):\\([-[:digit:]]+\\)\\|\*\\)")
|
||||||
|
(length (length lis))
|
||||||
(portion (match-string 1 index))
|
(portion (match-string 1 index))
|
||||||
(remainder (substring index (match-end 0))))
|
(remainder (substring index (match-end 0))))
|
||||||
(flet ((wrap (num) (if (< num 0) (+ length num) num))
|
(flet ((wrap (num) (if (< num 0) (+ length num) num))
|
||||||
(open (lis) (if (and (listp lis) (= (length lis) 1)) (car lis) lis)))
|
(open (ls) (if (and (listp ls) (= (length ls) 1)) (car ls) ls)))
|
||||||
(open
|
(open
|
||||||
(mapcar
|
(mapcar
|
||||||
(lambda (sub-lis) (org-babel-ref-index-list remainder sub-lis))
|
(lambda (sub-lis) (org-babel-ref-index-list remainder sub-lis))
|
||||||
(if (string-match "\\(\\([-[:digit:]]+\\):\\([-[:digit:]]+\\)\\|\*\\)"
|
(if (or (= 0 (length portion)) (string-match ind-re portion))
|
||||||
portion)
|
(mapcar
|
||||||
(mapcar (lambda (n) (nth n lis))
|
(lambda (n) (nth n lis))
|
||||||
(apply 'number-sequence
|
(apply 'number-sequence
|
||||||
(if (match-string 2 portion)
|
(if (and (> (length portion) 0) (match-string 2 portion))
|
||||||
(list
|
(list
|
||||||
(wrap (string-to-number (match-string 2 portion)))
|
(wrap (string-to-number (match-string 2 portion)))
|
||||||
(wrap (string-to-number (match-string 3 portion))))
|
(wrap (string-to-number (match-string 3 portion))))
|
||||||
(list (wrap 0) (wrap -1)))))
|
(list (wrap 0) (wrap -1)))))
|
||||||
(list (nth (wrap (string-to-number portion)) lis)))))))
|
(list (nth (wrap (string-to-number portion)) lis)))))))
|
||||||
lis))
|
lis))
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,11 @@ var of the same value."
|
||||||
(format "$(cat <<BABEL_TABLE\n%s\nBABEL_TABLE\n)"
|
(format "$(cat <<BABEL_TABLE\n%s\nBABEL_TABLE\n)"
|
||||||
(orgtbl-to-generic
|
(orgtbl-to-generic
|
||||||
(deep-string var) (list :sep (or sep "\t")))))
|
(deep-string var) (list :sep (or sep "\t")))))
|
||||||
(if (stringp var) (format "%s" var) (format "%S" var))))
|
(if (stringp var)
|
||||||
|
(if (string-match "[\n\r]" var)
|
||||||
|
(format "$(cat <<BABEL_STRING\n%s\nBABEL_STRING\n)" var)
|
||||||
|
(format "%s" var))
|
||||||
|
(format "%S" var))))
|
||||||
|
|
||||||
(defun org-babel-sh-table-or-results (results)
|
(defun org-babel-sh-table-or-results (results)
|
||||||
"Convert RESULTS to an appropriate elisp value.
|
"Convert RESULTS to an appropriate elisp value.
|
||||||
|
|
Loading…
Reference in a new issue