Christophe Rhodes <cs...@cantab.net> wrote: > Hi, > > Consider the following org-mode file, assuming that org-babel support > for emacs lisp and R is active: > > --- begin --- > #+TITLE: Foo > > #+begin_src emacs-lisp :exports results :results value raw > "[[file:foo.png]]" > #+end_src > > #+results: > [[foo.png]] > > #+begin_src R :exports results :results value raw > "[[file:bar.png]]" > #+end_src > #+results: > [[file:bar\.png]] > --- end --- > > The problem is probably obvious from the above, but to be explicit: the > intent is to generate raw org-mode from the code blocks (this case is > hugely simplified from my actual application), producing links to images > which will then be part of the eventual exported document. For emacs > lisp, this works fine; for R, the path through files and specifically > org-babel-import-elisp-from-file / org-babel-string-read causes the > return value to be misinterpreted, introducing an extra backslash, and > therefore generating bogus export files. > > (This used to work for my use case in org-mode 7.4, and does not work in > org-mode 7.6; I looked at HEAD to see if I could identify a fix, but did > not find one -- I'm sorry if I missed it) >
This bisects to the following commit: --8<---------------cut here---------------start------------->8--- commit b6912331715c7da08927b3636b6721af5f5e0c41 Author: Eric Schulte <schulte.e...@gmail.com> Date: Tue Mar 1 10:31:00 2011 -0700 ob: allow passing elisp vectors through to code blocks * lisp/ob.el (org-babel-read): Pass elisp vectors through to code blocks. diff --git a/lisp/ob.el b/lisp/ob.el index ea1c968..b0b5fb6 100644 --- a/lisp/ob.el +++ b/lisp/ob.el @@ -1913,16 +1913,15 @@ (defun org-babel-script-escape (str) (defun org-babel-read (cell &optional inhibit-lisp-eval) "Convert the string value of CELL to a number if appropriate. -Otherwise if cell looks like lisp (meaning it starts with a \"(\" -or a \"'\") then read it as lisp, otherwise return it unmodified -as a string. Optional argument NO-LISP-EVAL inhibits lisp -evaluation for situations in which is it not appropriate." +Otherwise if cell looks like lisp (meaning it starts with a +\"(\", \"'\", \"`\" or a \"[\") then read it as lisp, otherwise +return it unmodified as a string. Optional argument NO-LISP-EVAL +inhibits lisp evaluation for situations in which is it not +appropriate." (if (and (stringp cell) (not (equal cell ""))) (or (org-babel-number-p cell) (if (and (not inhibit-lisp-eval) - (or (equal "(" (substring cell 0 1)) - (equal "'" (substring cell 0 1)) - (equal "`" (substring cell 0 1)))) + (member (substring cell 0 1) '("(" "'" "`" "["))) (eval (read cell)) (progn (set-text-properties 0 (length cell) nil cell) cell))) cell)) --8<---------------cut here---------------end--------------->8--- If I revert it, I get the 7.4 behavior. The problem is that "[..." looks like a lisp vector to this function. Nick