From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: [Babel][Bug] Inconsistent output from babel function depending on how called Date: Thu, 26 May 2011 17:57:35 -0600 Message-ID: <87boyo6u0i.fsf@gmail.com> References: <87wrhdqozg.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([140.186.70.92]:44449) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QPyzc-0001yP-2p for emacs-orgmode@gnu.org; Fri, 27 May 2011 11:30:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QPyzb-0008EB-40 for emacs-orgmode@gnu.org; Fri, 27 May 2011 11:30:28 -0400 Received: from mail-px0-f179.google.com ([209.85.212.179]:36855) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QPyza-0008E5-J7 for emacs-orgmode@gnu.org; Fri, 27 May 2011 11:30:27 -0400 Received: by pxi2 with SMTP id 2so1105966pxi.38 for ; Fri, 27 May 2011 08:30:25 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Ethan Ligon Cc: "Emacs-orgmode@gnu.org" Ethan Ligon writes: > So, the ":result output org" ought to be associated with the *call*, > not with the function. That makes good sense. But perhaps it still > doesn't work quite as it ought... > > On Thu, May 26, 2011 at 11:46 AM, Eric Schulte w= rote: >> Ethan Ligon writes: >> >>> I'd like to call a simple babel code block to generate org-code >>> If I define a list thusly: >>> >>> #+results: list1 >>> =C2=A0- foo >>> =C2=A0- bar >>> >>> Then I define a code block thusly, and execute it by C-c C-c on the >>> "source" line. =C2=A0That yields the desired result: a sequence of head= ings >>> under "#+results: print_list". >>> >>> #+source: print_list(lst=3Dlist1) >>> #+begin_src sh :results output org >>> =C2=A0 for i in $lst; do >>> =C2=A0 =C2=A0 echo "* $i" >>> =C2=A0 done >>> #+end_src >>> >>> #+results: print_list >>> #+BEGIN_ORG >>> * foo >>> * bar >>> #+END_ORG >>> >>> Now I want to reuse the code block to generate other sequences of >>> headings. =C2=A0But even if I call it with the *same* list, instead of = the >>> desired headings, I get a literal, as below. >>> >>> #+call: print_list(lst=3Dlist1) >>> >>> #+results: print_list(lst=3Dlist1) >>> : * foo >>> : * bar >>> >>> I think this qualifies as a bug---surely the method of calling the >>> code block shouldn't affect the output? >>> >> >> No, this is expected (if possibly under-documented behavior). =C2=A0The >> :results header arguments are associated with the code block and *not* >> with the #+call line. =C2=A0To get the desired behavior, you must specif= y the >> :results header argument on the #+call: line thusly. >> >> #+call: print_list(lst=3Dlist1) :results output org >> > > If I do this, I get > #+results: print_list(lst=3Dlist1) > #+END_ORG > #+BEGIN_ORG > > which is surprising first because there's no proper output, but also > because the end and begin tags are reversed (!). > > What *does* work is to omit the "output" header argument. > #+call: print_list(lst=3Dlist1) :results org > > #+results: print_list(lst=3Dlist1) > #+BEGIN_ORG > * foo > * bar > #+END_ORG > > So now I definitely have a good work-around, but still think there's a > bug. > Well yes and no... There is a bug here, but not in the interpretation of the header arguments... the interpretation is just so non-intuitive that I also misunderstood the resulting behavior in my earlier reply. In the example of #+call: print_list(lst=3Dlist1) :results output org both the "org" and "output" header arguments are applied to the call line, when in fact the output header argument should be applied to the list1 code block (not the call line). The results of applying the "output" header argument to the call line is to return no results (which makes sense because the call line does not print to STDOUT). The correct form of the above would be as follows (explicitly passing the "output" header argument to the list1 code block) #+call: list1[:results output](lst=3D"~/Desktop") :results org #+results: list1[:results output](lst=3D"~/Desktop") #+BEGIN_ORG * ~/Desktop #+END_ORG There is an error however in that when no results are returned the begin/end parts of the Org-mode code block are flipped... > > Thanks, > -Ethan --=20 Eric Schulte http://cs.unm.edu/~eschulte/