Aaron Ecay <aarone...@gmail.com> writes: > Hi Eric > > 2013ko martxoak 31an, Eric Schulte-ek idatzi zuen: >> >> Hi, >> >> I've been wanting to add the ability to post-process the results of a >> code block for some time, and some recent threads (e.g., [1] and [2]) >> could both have benefited from post-processing of code block output. > > This looks very nice! > >> >> Does this new header argument seem useful? Any suggestions for better >> syntax which don't add too much conceptual or code complexity? > > See below. > >> @@ -625,6 +626,11 @@ block." >> (not (listp result))) >> (list (list result)) result)) >> (funcall cmd body params))) >> + ;; possibly perform post process provided its appropriate >> + (when (cdr (assoc :post params)) >> + (let ((*this* result)) >> + (setq result (org-babel-ref-resolve >> + (cdr (assoc :post params)))))) > > What if you did some string surgery on the :post string, to insert > ",data=\"the result\"" into the call? That way users could just write > :post add-width(width=5cm), which would be automatically transformed > into add-width(width=5cm,data="[[graph.png]]") before being passed to > o-b-ref-resolve. >
I don't like this idea, because then it becomes "magic" which value is assigned the result of the current code block, rather than the current case in which it is very explicit. > > (I guess you’d have to take special care to handle things like ":post > no-args()" and ":post no-args" properly, stripping the initial comma in > the first case and adding parens in the second.) > > This requires that all :post code blocks take a data > argument, but I don’t think that’s more onerous than stipulating the > *this* variable at the lisp level. > I think it is more onerous, I also think it reduces flexibility (the writing of the called block needs to know exactly which argument will want to be set by later code blocks). > > Also, I’m unclear on whether elisp is supported Yes it is > (or should be) Yes again > . Do we want to allow ":post (message *this*)"? Yes again If your issue is that (identity *this*) is cumbersome, then I would agree. What about if we change `org-babel-read' as with the attached patch s.t. *any* variable with ear-muffs will be read as Emacs Lisp, allowing this simpler alternative. #+name: val-wrap #+begin_src sh :input="" :results verbatim echo "--------------------" echo "$input" echo "--------------------" #+end_src #+begin_src sh :post val-wrap(input=*this*) echo "foo" #+end_src #+RESULTS: : -------------------- : foo : -------------------- Cheers, -- Eric Schulte http://cs.unm.edu/~eschulte