#+OPTIONS: H:3 num:nil toc:2 \n:nil @: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 hideblocks #+SEQ_TODO: TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@) #+TAGS: Write(w) Update(u) Fix(f) Check(c) noexport(n) #+TITLE: Org-babel-octave-matlab #+AUTHOR: Dan Davison #+EMAIL: davison at stats dot ox dot ac dot uk #+LANGUAGE: en #+STYLE: This file contains notes on the support for matlab and octave in org-babel. As these get sorted out, hopefully this document will turn into the documentation for these languages. Some of the current problems (e.g. [[*TODO%20How%20to%20detect%20if%20result%20is%20numeric%20or%20string][this one]] and [[*TODO%20Ensure%20that%20value%20is%20returned%20when%20expected][this one]]) stem from the extremely simple code being used to write results to file. Here the first %s is replaced with the body of the block, and the second %s with a temp file name. #+begin_src emacs-lisp (defvar org-babel-octave-wrapper-method "%s save -ascii %s ans") #+end_src As noted below, this needs to be made more sophisticated, in particular to detect whether 'ans' is an object for which save -ascii is appropriate (e.g. an array) or not (e.g. a string). * TODO How to detect if result is numeric or string? - State "TODO" from "" [2010-03-18 Thu 12:37] Currently strings are being returned as their ascii codes: #+begin_src octave 'ab' #+end_src #+results: : 9.70000000e+01 9.80000000e+01 * TODO How to divert graphical output to file? - State "TODO" from "" [2010-03-17 Wed 23:3 Currently we are like pyuthoin and ruby in that we can use :results file and the block will output a link to that file, but unless your code takes care of it (e.g. write graphics to file), no content will be written to that file. However, would it be appropriate to move to the org-babel-R model, whereby if :results file is supplied, any graphical is automatically diverted to that file? * TODO How to get rid of the matlab splash message - State "TODO" from "" [2010-03-18 Thu 01:09] -nosplash doesn't seem to do the trick. * TODO Ensure that value is returned when expected - State "TODO" from "" [2010-03-18 Thu 13:57] In :results value mode, we return whatever value the variable 'ans' has at the end of the block. However, there are some problems with this as can be seen from the following session: #+begin_example octave> 'hello' ans = hello octave> ans ans = hello octave> x = 19 x = 19 octave> x x = 19 octave> ans ans = hello #+end_example So although this works as expected: #+begin_src octave :var z=67 z + 0 #+end_src #+results: : 6.70000000e+01 This doesn't #+begin_src octave :var z=67 z #+end_src #+results: : 4.70000000e+01 1.17000000e+02 1.15000000e+02 1.14000000e+02 4.70000000e+01 1.15000000e+02 1.04000000e+02 9.70000000e+01 1.14000000e+02 1.01000000e+02 4.70000000e+01 1.11000000e+02 9.90000000e+01 1.16000000e+02 9.70000000e+01 1.18000000e+02 1.01000000e+02 4.70000000e+01 1.12000000e+02 9.70000000e+01 9.90000000e+01 1.07000000e+02 9.70000000e+01 1.03000000e+02 1.01000000e+02 1.15000000e+02 4.70000000e+01 5.10000000e+01 4.60000000e+01 5.00000000e+01 As part of its internal operation, org-babel appends a special end-of-output string at the end of each block and it is this string's value (integer ascii codes) that is being returned here. Of course, this works #+begin_src octave :var ans=67 ans #+end_src #+results: : 6.70000000e+01 * TODO Allow multiple sessions - State "TODO" from "" [2010-03-16 Tue 22:12] * TODO Should we use these by default to save external process startup time? - State "TODO" from "" [2010-03-18 Thu 01:27] - -nodisplay ? - -nojvm ? * TODO How to implement :results pp, :results code? - State "TODO" from "" [2010-03-18 Thu 01:10] * TODO submit patch to matlab.el so that matlab session can be remote - State "TODO" from "" [2010-03-18 Thu 01:29] At the moment I'm using a massive hack: insert (cd "/ddavison@tombstone.princeton.edu:") ;; DED around line 4253 in matlab.el so that my matlab sessions run on a machine with matlab installed.