Thanks to Graham Smith for pointing out the need for in-place
results updates
* contrib/babel/lisp/org-babel.el (org-babel-merge-params): adding
append and prepend as exclusive options to the :results header
argument
(org-babel-insert-result): now updating results in place, and
honoring the `prepend' and `append' :results header arguments
* contrib/babel/lisp/org-babel.el (org-babel-header-arg-names): adding
:noeval header argument which can be specified to inhibit the
execution of a source block during export.
* contrib/babel/lisp/org-babel-exp.el (org-babel-exp-do-export):
adding :noeval header argument which can be specified to inhibit the
execution of a source block during export.
* contrib/babel/lisp/org-babel-comint.el (org-babel-comint-with-output):
Placing a more general regexp substitution for matching newlines
returned by comint. This new option should definitely cover all
cases.
* contrib/babel/lisp/org-babel-comint.el (org-babel-comint-with-output):
If there is dangling text left after the process mark in a comint
buffer, it will now be safely stored away during babel execution,
and then replaced when babel is finished with the buffer.
This commit also fixes some indentation issues.
* contrib/babel/lisp/langs/org-babel-ruby.el (org-babel-ruby-initiate-session):
Adding a small wait after stating a new ruby session. This avoids
errors with `ansi-color-process-output' not being able to find the
process mark.
* contrib/babel/lisp/org-babel.el (org-babel-insert-result): Replaced
call to `org-cycle' with a call to the simpler and more appropriate
`org-table-align'.
* contrib/babel/library-of-babel.org (Read/Write): adding
library-of-babel functions for file I/O
* contrib/babel/lisp/org-babel-exp.el (org-babel-exp-do-export):
This brings babel more inline with Sweave, by ensuring that any code
block which could change the state in a persistent session is
executed. Prior to this change the following org-mode text like would
not export as expected because the x variable would not be
initialized.
** inline expressions
:PROPERTIES:
:session: *R*
:END:
#+begin_src R :exports code :results silent
x<-5
#+end_src
the sum of 1 and 4 is equal to src_R{x}
* contrib/lisp/org-special-blocks.el (org-special-blocks-make-special-cookies):
Emacs 22 doesn't have string-match-p
* lisp/org-freemind.el (org-freemind-write-mm-buffer):
(org-freemind-get-node-style):
Emacs 22 doesn't have string-match-p
* lisp/org-html.el (org-html-make-link):
Use new org-string-match-p for compatibility
* contrib/babel/lisp/org-babel-tangle.el (org-babel-spec-to-string):
The insertion of automatically generated comments into tangled code
is now customizable through the `org-babel-tangle-w-comments'
variable.
* contrib/babel/lisp/org-babel.el
(org-babel-params-from-properties):
Check for language-specific header arguments
(org-babel-parse-src-block-match):
Pass lang parameter when checking properties for header args
(org-babel-parse-inline-src-block-match):
Pass lang parameter when checking properties for header args
Carsten Dominik <carsten.dominik@gmail.com> writes:
> On May 17, 2010, at 4:39 PM, Michael Sperber wrote:
>
>> In particular, fixing the require won't be enough: org-babel-python.el
>> uses `run-python' and interacts with the inferior Python, whereas
>> python-mode.el defines `py-shell'.
>>
>> Should I try to abstract over the differences?
>
> Yes, this would be much appreciated. (I think, Eric or Dan?)
OK, I've attached a patch that makes `org-babel-python' work on XEmacs.
Most of the issues are pure XEmacs issues. Notes:
- XEmacs doesn't have [[:digit:]] - I hope to rectify this in the
future, but it seems there's no downside in this particular case to
replacing by [0-9].
- XEmacs doesn't have `move-end-of-line', but does have `end-of-line'.
I don't understand the intent of having both of these, but the code
seems fine with `end-of-line'.
- It seems there are way too few `require's throughout org-babel. I
don't know if it's OK to add the ones I needed.
- `org-babel-python-evaluate' looked broken as-is: It doesn't use the
`body' argument properly, the result is (I think) processed in the
wrong order and not properly split into lines. I've fixed all these,
but a review is probably in order.
Currently, this uses the presence of a temporary file to signal that
Matlab Emacs Link evaluation is not yet complete.
Emacs Link support added in collaboration with Christopher Long.
To use EmacsLink, the user will need to set
org-babel-matlab-with-emacs-link to a non-nil value, and also arrange
that (matlab-with-emacs-link) evaluates to a non-nil value.
Added a handler for blockquotes.
Also added :body-newline-paragraph to the org-set-generic-type. This is
intended to help handling output formats (like tikiwiki) where newlines are
treated as paragraph separators, instead of being used to fill (i.e., the
destination is expected to do the word-wrapping). If this is set to T then
org-export-generic will emit a newline character when it sees a blank
line. This should be used in concert with a value like "%s " for
:body-line-format and nil for :body-line-wrap.
org-babel-expand-body:lang function needs to be implemented by every
language, and is used to expand the body of a code block for
execution or tangling
adding a suite of functions to org-babel.el which can be used to
handle hlines, rownames, and columnnames in input tables. These
functions can be called from any org-babel-language.el file.
done in close collaboration with Dan Davison
Prior to this, a terminal hline would leave dangling empty cells:
#+TBLNAME: A
|---+---+---|
| a | b | c |
|---+---+---|
#+begin_src emacs-lisp :var tab=A
tab
#+end_src
#+results:
|---+---+---|
| a | b | c |
|---+---+---|
| | | |
Previously "R" could overshadow "Ruby", and "C" could overshadow
"Clojure", causing blocks of the longer language name to fail to
load. This issue has now been fixed
thanks to Maurizio Vitale for the suggestion. This allows literal
values to be passed to code blocks through `sbe' without forcing the
use of quotes inside the table.
This deals with external process :results value mode for R, ruby,
python, perl and clojure: if the shell process has a non-zero exit
code, a buffer containing stderr is displayed.
Prior to this commit,
OUTPUT-BUFFER nil
REPLACE 'replace
ERROR-BUFFER 'current-buffer
resulted in stdout going with stderr to the current buffer, contra the
docstring. With this change stdout is discarded in this case. The
docstring does stipulate that stdout always should go to *Shell
Command Output*; this change does not make that happen in this case.
At this commit, org-babel-shell-command-on-region is a direct copy of
shell-command-on-region. In addition to switching to use the org-babel
version, we change the argument passed so that they agree with the
docstring of s-c-o-r.
Despite the change in arguments, the same behaviour results because
s-c-o-r does not behave as documented in emacs23. Future commits will
be able to fix these bugs in the org-babel version, as necessary.
This change fixes a bug in the remote execution branch, involving the
way that org-babel-tramp-handle-call-process-region is used
to (conditionally) handle calls to call-process-region. When
org-babel-execute-src-block called itself recursively (e.g. when
resolving a reference to another src block), a circular binding of
symbols and values resulted.
When using ':results value' in certain situations, results are written
to file by the foreign language process and subsequently read from
file by emacs into an elisp table structure. If the foreign language
process is running remotely, then the results are written
remotely. These changes ensure that in that case, an appropriate
remote file name is constructed to read the remote data.
These changes solve two problems: both are discussed in the following thread
http://lists.gnu.org/archive/html/tramp-devel/2010-02/msg00025.html
of which a summary follows.
Firstly, shell-command-on-region does not work with tramp in the same
way that shell-command does. I.e. whereas
(let ((default-directory "/user@remote-host:"))
(shell-command "hostname" t))
gives the remote hostname,
(let ((default-directory "/user@remote-host:"))
(shell-command-on-region (point) (mark) "hostname" t))
does not.
The reason is that shell-command-on-region calls call-process-region,
which does not use a tramp handler for remote files. However, such a
file handler does exist (unused) in the tramp sources:
tramp-handle-call-process-region. There is a slight problem in that
there is a bug in that function definition in current tramp (which has
persisted because the function is not normally used).
Therefore, we define an org-babel version of
tramp-handle-call-process-region which fixes the bug, and we bind
call-process-region to org-babel-tramp-handle-call-process-region for
the duration of org-babel-execute-src-block.
This introduces a new header argument :dir. For the duration of source
block execution, default-directory is set to the value of this header
argument. Consequences include:
- external interpreter processes run in that directory
- new session processes run in that directory (but existing ones are unaffected)
- relative paths for file output are relative to that directory
The name of a directory on a remote machine may be specified with
tramp syntax (/user@host:path), in which case the interpreter
executable will be sought in tramp-remote-path, and if found will
execute on the remote machine in the specified remote directory.
Use shell-command-on-region, bringing R into line with ruby, python,
clojure, shell. In addition to consistency (and perhaps efficiency),
this will also be preferable in the case of a remote R process because
it means that transfer of the input to the remote process is dealt
with automatically by tramp.
Before this change we have
#+begin_src ruby :results value :session
["1", "3"]
#+end_src
#+results:
: 1", "3
After, we have
#+begin_src ruby :results value :session
["1", "3"]
#+end_src
#+results:
| 1 | 3 |
This change provides for better export of named source-code blocks,
with specific support for more attractive html export. The arguments
are included with the source code name, and both the source code name
and code body are wrapped in a div to support styling with css. For
example the following CSS can be used to associate a source-code block
name with it's code body, and to slightly indent the body.
.org-src-container {
border-left: 4px solid gray;
padding: 0.5em 0.5em 0.5em 1em; }
.org-src-container pre {
margin-left: 1em; }