diff --git a/org-babel-worg.org b/org-babel-worg.org index fb502310a..8a34f0438 100644 --- a/org-babel-worg.org +++ b/org-babel-worg.org @@ -1,4 +1,4 @@ -#+OPTIONS: H:3 num:nil toc:2 \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc +#+OPTIONS: H:3 num:nil toc:1 \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc #+STARTUP: align fold nodlcheck hidestars oddeven lognotestate #+SEQ_TODO: TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@) #+TAGS: Write(w) Update(u) Fix(f) Check(c) @@ -96,6 +96,9 @@ Results of R evaluation **** Additional :results settings *** Arguments to source code blocks + :PROPERTIES: + :CUSTOM_ID: arguments-to-source-code-blocks + :END: In addition to evaluation of code blocks, org-babel allows them to be parameterised (i.e. have arguments). Thus source code blocks now have the status of *functions*. @@ -182,6 +185,68 @@ then graph them with R. 4. Results of R code [[file:images/dirs.png]] * Spreadsheet plugins for org-mode in any language + +*NOTE*: Maybe in-addition-to/in-stead-of this example we should do a +more traditional "spreadsheet" example with R [Eric] + +Not only can Org-babel pass entire tables of data to source code +blocks (see [[arguments-to-source-code-blocks]]), Org-babel can also be +used to call source code blocks from *within* tables using the +Org-mode's [[http://orgmode.org/manual/The-spreadsheet.html#The-spreadsheet][existing spreadsheet functionality]]. + +In fact the functional test suite for Org-babel is implemented as a +large Org-mode table. To run the entire test suite you simple +evaluate the table =C-u C-c C-c=, and all of the tests are run +updating the table with pass/fail statistics. + +Here's a sample of our test suite. + +#+TBLNAME: org-babel-tests +| functionality | block | arg | expected | results | pass | +|------------------+--------------+-----+-------------+-------------+------| +| basic evaluation | | | | | pass | +|------------------+--------------+-----+-------------+-------------+------| +| emacs lisp | basic-elisp | 2 | 4 | 4 | pass | +| shell | basic-shell | | 6 | 6 | pass | +| ruby | basic-ruby | | org-babel | org-babel | pass | +| python | basic-python | | hello world | hello world | pass | +| R | basic-R | | 13 | 13 | pass | +#+TBLFM: $5='(if (= (length $3) 1) (progn (message (format "running %S" '(sbe $2 (n $3)))) (sbe $2 (n $3))) (sbe $2))::$6='(if (string= $4 $5) "pass" (format "expected %S but was %S" $4 $5)) +#+TBLFM: $5=""::$6="" + +** code blocks for tests + +#+srcname: basic-elisp +#+begin_src emacs-lisp :var n=7 +(* 2 n) +#+end_src + +#+srcname: basic-shell +#+begin_src sh :results silent +expr 1 + 5 +#+end_src + +#+srcname: date-simple +#+begin_src sh :results silent +date +#+end_src + +#+srcname: basic-ruby +#+begin_src ruby :results silent +"org-babel" +#+end_src + +#+srcname: basic-python +#+begin_src python :results silent +'hello world' +#+end_src + +#+srcname: basic-R +#+begin_src R :results silent +b <- 9 +b + 4 +#+end_src + * Library of Babel What about those source code blocks which are so useful you want to have them available in every org-mode buffer?