0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-07-15 14:16:27 +00:00

DONE results-type header (vector/file) [3/3]

This commit is contained in:
Eric Schulte 2009-05-22 16:17:44 -07:00
parent 9076b528ad
commit 92d070c41e
2 changed files with 130 additions and 103 deletions

View file

@ -117,9 +117,14 @@ the header arguments specified at the source code block."
(params (org-combine-plists (third info) params)) (params (org-combine-plists (third info) params))
(cmd (intern (concat "litorgy-execute:" lang))) (cmd (intern (concat "litorgy-execute:" lang)))
result) result)
;; (message (format "params=%S" params)) ;; debugging statement
(unless (member lang litorgy-interpreters) (unless (member lang litorgy-interpreters)
(error "Language is not in `litorgy-interpreters': %s" lang)) (error "Language is not in `litorgy-interpreters': %s" lang))
(setq result (funcall cmd body params)) (setq result (funcall cmd body params))
;; possibly force result into a vector
(if (and (not (listp result)) (cdr (assoc :results params))
(member "vector" (split-string (cdr (assoc :results params)))))
(setq result (list result)))
(if arg (if arg
(message (format "%S" result)) (message (format "%S" result))
(litorgy-insert-result result (cdr (assoc :results params)))) (litorgy-insert-result result (cdr (assoc :results params))))

228
rorg.org
View file

@ -3,63 +3,9 @@
#+SEQ_TODO: TODO PROPOSED | DONE DEFERRED REJECTED #+SEQ_TODO: TODO PROPOSED | DONE DEFERRED REJECTED
#+STARTUP: oddeven #+STARTUP: oddeven
* Tasks [13/25] * Tasks [14/26]
** TODO results-type header (vector/file) [2/3] ** TODO set =:results silent= when eval with prefix argument
In response to a point in Dan's email. We should allow the user to
force scalar or vector results. This could be done with a header
argument, and the default behavior could be controlled through a
configuration variable.
#+srcname: task-trivial-vector
#+begin_src ruby :results replace
:scalar
#+end_src
#+resname:
: :scalar
since it doesn't make sense to turn a vector into a scalar, lets
just add a two values...
- vector :: forces the results to be a vector (potentially 1 dimensional)
- file :: this throws an error if the result isn't a string, and
tries to treat it as a path to a file.
I'm just going to cram all of these into the =:results= header
argument. Then if we allow multiple header arguments it should
work out, for example one possible header argument string could be
=:results replace vector file=, which would *replace* any existing
results forcing the results into an org-mode table, and
interpreting any strings as file paths.
*** DONE multiple =:results= headers
#+srcname: multiple-result-headers
#+begin_src ruby :results replace silent
:schulte
#+end_src
#+resname:
*** DONE file result types
When inserting into an org-mode buffer create a link with the path
being the value, and optionally the display being the
=file-name-nondirectory= if it exists.
#+srcname: task-file-result
#+begin_src python :results replace file
"something"
#+end_src
#+resname:
[[something][something]]
This will be useful because blocks like =ditaa= and =dot= can return
the string path of their files, and can add =file= to their results
header.
*** TODO vector result types
** TODO (simple caching) check for named results before source blocks ** TODO (simple caching) check for named results before source blocks
see the TODO comment in [[file:litorgy/litorgy-ref.el::TODO%20This%20should%20explicitly%20look%20for%20resname%20lines%20before][litorgy-ref.el#litorgy-ref-resolve-reference]] see the TODO comment in [[file:litorgy/litorgy-ref.el::TODO%20This%20should%20explicitly%20look%20for%20resname%20lines%20before][litorgy-ref.el#litorgy-ref-resolve-reference]]
@ -134,6 +80,16 @@ du -sc ~/*
(mapcar #'car sizes) (mapcar #'car sizes)
#+end_src #+end_src
** TODO figure out how to handle graphic output
This is listed under [[* graphical output][graphical output]] in out objectives.
This should take advantage of the =:results file= option, and
languages which almost always produce graphical output should set
=:results file= to true by default. That would handle placing these
results in the buffer. Then if there is a combination of =silent= and
=file= =:results= headers we could drop the results to a temp buffer
and pop open that buffer...
** TODO inline source code blocks [3/5] ** TODO inline source code blocks [3/5]
Like the =\R{ code }= blocks Like the =\R{ code }= blocks
@ -161,17 +117,6 @@ we should color these blocks differently
*** TODO refine html exportation *** TODO refine html exportation
should use a span class, and should show original source in tool-tip should use a span class, and should show original source in tool-tip
** TODO figure out how to handle graphic output
This is listed under [[* graphical output][graphical output]] in out objectives.
How should this work for R? For example how are files included with
Sweave? Would/Should we just mimic the behavior of Sweave with the
addition of support for poping up graphics during live evaluation of a
source code block.
I think the best way to approach this would be to start with an
example R source-code block and then work up from there.
** PROPOSED support for passing paths to files between source blocks ** PROPOSED support for passing paths to files between source blocks
Maybe this should be it's own result type (in addition to scalars and Maybe this should be it's own result type (in addition to scalars and
vectors). The reason being that some source-code blocks (for example vectors). The reason being that some source-code blocks (for example
@ -285,6 +230,70 @@ mean(mean(vec))
out some lines, and then convert it to litorgy format for out some lines, and then convert it to litorgy format for
posterity. Same for a shell session either in a *shell* buffer, or posterity. Same for a shell session either in a *shell* buffer, or
pasted from another terminal emulator. And python of course. pasted from another terminal emulator. And python of course.
** DONE results-type header (vector/file) [3/3]
In response to a point in Dan's email. We should allow the user to
force scalar or vector results. This could be done with a header
argument, and the default behavior could be controlled through a
configuration variable.
#+srcname: task-trivial-vector
#+begin_src ruby :results replace vector
:scalar
#+end_src
#+resname:
| ":scalar" |
since it doesn't make sense to turn a vector into a scalar, lets
just add a two values...
- vector :: forces the results to be a vector (potentially 1 dimensional)
- file :: this throws an error if the result isn't a string, and
tries to treat it as a path to a file.
I'm just going to cram all of these into the =:results= header
argument. Then if we allow multiple header arguments it should
work out, for example one possible header argument string could be
=:results replace vector file=, which would *replace* any existing
results forcing the results into an org-mode table, and
interpreting any strings as file paths.
*** DONE multiple =:results= headers
#+srcname: multiple-result-headers
#+begin_src ruby :results replace silent
:schulte
#+end_src
#+resname:
*** DONE file result types
When inserting into an org-mode buffer create a link with the path
being the value, and optionally the display being the
=file-name-nondirectory= if it exists.
#+srcname: task-file-result
#+begin_src python :results replace file
"something"
#+end_src
#+resname:
[[something][something]]
This will be useful because blocks like =ditaa= and =dot= can return
the string path of their files, and can add =file= to their results
header.
*** DONE vector result types
#+srcname: task-force-results
#+begin_src emacs-lisp :results vector
8
#+end_src
#+resname:
| 8 |
** DONE results name ** DONE results name
In order to do this we will need to start naming our results. In order to do this we will need to start naming our results.
@ -750,42 +759,43 @@ Evaluate all the cells in this table for a comprehensive test of the
litorgy functionality. litorgy functionality.
#+TBLNAME: litorgy-tests #+TBLNAME: litorgy-tests
| functionality | block | arg | expected | results | pass | | functionality | block | arg | expected | results | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| basic evaluation | | | | | pass | | basic evaluation | | | | | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| emacs lisp | basic-elisp | | 5 | 5 | pass | | emacs lisp | basic-elisp | | 5 | 5 | pass |
| shell | basic-shell | | 6 | 6 | pass | | shell | basic-shell | | 6 | 6 | pass |
| ruby | basic-ruby | | litorgy | litorgy | pass | | ruby | basic-ruby | | litorgy | litorgy | pass |
| python | basic-python | | hello world | hello world | pass | | python | basic-python | | hello world | hello world | pass |
| R | basic-R | | 13 | 13 | pass | | R | basic-R | | 13 | 13 | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| tables | | | | | pass | | tables | | | | | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| emacs lisp | table-elisp | | 3 | 3 | pass | | emacs lisp | table-elisp | | 3 | 3 | pass |
| ruby | table-ruby | | 1-2-3 | 1-2-3 | pass | | ruby | table-ruby | | 1-2-3 | 1-2-3 | pass |
| python | table-python | | 5 | 5 | pass | | python | table-python | | 5 | 5 | pass |
| R | table-R | | 3.5 | 3.5 | pass | | R | table-R | | 3.5 | 3.5 | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| source block references | | | | | pass | | source block references | | | | | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| all languages | chained-ref-last | | Array | Array | pass | | all languages | chained-ref-last | | Array | Array | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| source block functions | | | | | pass | | source block functions | | | | | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| emacs lisp | defun-fibb | | fibbd | fibbd | pass | | emacs lisp | defun-fibb | | fibbd | fibbd | pass |
| run over | Fibonacci | 0 | 1 | 1 | pass | | run over | Fibonacci | 0 | 1 | 1 | pass |
| a | Fibonacci | 1 | 1 | 1 | pass | | a | Fibonacci | 1 | 1 | 1 | pass |
| variety | Fibonacci | 2 | 2 | 2 | pass | | variety | Fibonacci | 2 | 2 | 2 | pass |
| of | Fibonacci | 3 | 3 | 3 | pass | | of | Fibonacci | 3 | 3 | 3 | pass |
| different | Fibonacci | 4 | 5 | 5 | pass | | different | Fibonacci | 4 | 5 | 5 | pass |
| arguments | Fibonacci | 5 | 8 | 8 | pass | | arguments | Fibonacci | 5 | 8 | 8 | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| bug fixing | | | | | pass | | bugs and tasks | | | | | pass |
|-------------------------+-------------------------+-----+-------------+-------------+------| |-------------------------+----------------------------+-----+-------------+-------------+------|
| simple ruby arrays | ruby-array-test | | 3 | 3 | pass | | simple ruby arrays | ruby-array-test | | 3 | 3 | pass |
| R number evaluation | bug-R-number-evaluation | | 2 | 2 | pass | | R number evaluation | bug-R-number-evaluation | | 2 | 2 | pass |
| multi-line ruby blocks | multi-line-ruby-test | | 2 | 2 | pass | | multi-line ruby blocks | multi-line-ruby-test | | 2 | 2 | pass |
| forcing vector results | test-forced-vector-results | | Array | Array | 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='(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))
** basic tests ** basic tests
@ -918,6 +928,18 @@ raise "oh nooooooooooo"
| the first line ends here... | -:5: warning: parenthesize argument(s) for future version... | | the first line ends here... | -:5: warning: parenthesize argument(s) for future version... |
#+TBLFM: $1='(sbe "multi-line-output")::$2='(sbe "multi-line-error") #+TBLFM: $1='(sbe "multi-line-output")::$2='(sbe "multi-line-error")
** forcing results types tests
#+srcname: test-trivial-vector
#+begin_src emacs-lisp :results vector silent
8
#+end_src
#+srcname: test-forced-vector-results
#+begin_src ruby :var triv=test-trivial-vector :results silent
triv.class.name
#+end_src
* Sandbox * Sandbox
:PROPERTIES: :PROPERTIES: