From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: [babel] Bugs for Emacs Lisp code blocks Date: Mon, 08 Apr 2013 15:07:34 -0600 Message-ID: <87a9p8zq7d.fsf@gmail.com> References: <868v4v1x6k.fsf@somewhere.org> <871uamo4e9.fsf@gmail.com> <86d2u6z6kg.fsf@somewhere.org> <87d2u65dr1.fsf@gmail.com> <86ehek93w7.fsf@somewhere.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:41634) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPJIR-00037e-TE for emacs-orgmode@gnu.org; Mon, 08 Apr 2013 17:08:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UPJIQ-0004IV-LJ for emacs-orgmode@gnu.org; Mon, 08 Apr 2013 17:08:11 -0400 Received: from mail-pa0-f42.google.com ([209.85.220.42]:51826) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPJIQ-0004IM-Et for emacs-orgmode@gnu.org; Mon, 08 Apr 2013 17:08:10 -0400 Received: by mail-pa0-f42.google.com with SMTP id kq13so3449188pab.15 for ; Mon, 08 Apr 2013 14:08:06 -0700 (PDT) In-Reply-To: <86ehek93w7.fsf@somewhere.org> (Sebastien Vauban's message of "Mon, 08 Apr 2013 22:14:00 +0200") 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: Sebastien Vauban Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain "Sebastien Vauban" writes: > Hi Eric, > > Eric Schulte wrote: >> "Sebastien Vauban" writes: >>> Eric Schulte wrote: >>>> Emacs Lisp is an exception in terms of colname processing, it has default >>>> header arguments set to pass column names through to the code block, where >>>> the processing may be done trivially in Emacs Lisp. >>> >>> OK, but I don't understand the precedence of header arguments. I thought >>> that a header argument given on the code block preempted all the other >>> values (system-wide default for all languages, language defaults, file-wide >>> arguments, and subtree arguments). >>> >>> Why isn't this true here as well? >> >> That is what is happening here, although combinations of :hlines and >> :colnames can be tricky. Especially weird, is that if you want to *unset* a >> header argument which is set at a higher level, you need to set it to '(), >> as in ":colnames '()". > > Much clearer, but not yet crystal-clear for me... > > Let me explain. AFAICT, there were 5 possibles values of the ":colnames" > header argument: > > - no header argument :: (default for all languages but Emacs Lisp) > - ":colnames no" :: (default for Emacs Lisp code blocks) > - ":colnames yes" :: Tells Org Babel that your first row contains column > names. > - ":colnames " :: Specifies to use as column names. > - ":colnames nil" :: Same as ":colnames yes". > > > Right? > Almost, values 1 (none) and 5 (nil) are the same. > > Now, indeed, your trick with ":colnames '()" (or even ":colnames > ()"...) does work well for Emacs-Lisp... > > Though, I thought that "()" was equivalent to "nil", but it seems not > to be the case, then. Is it because of some sort of type coercion, > that would convert nil as a string or something along such lines? > See "Emacs Lisp evaluation of variables" in (info "(org)var"). We could add nil as a special exception, but that might be surprising to some people. > > Extra question: when do we have to use such a trick? When the value can be a > list of things? If yes, why are you talking of ":hlines" -- there is no list > argument there? > Whenever you want to "unset" a header argument, which has a value set at some higher level. --=-=-= Content-Type: text/x-org Content-Disposition: inline; filename=example.org ** unset the colnames header argument #+name: unset-colnames-example-input | a | b | |---+---| | 1 | 2 | | 3 | 4 | Unlike most code blocks, Emacs Lisp has colnames set to "yes" in its default header arguments. #+begin_src emacs-lisp org-babel-default-header-args:emacs-lisp #+end_src #+RESULTS: | (:hlines . yes) | (:colnames . no) | As a result it has the following behavior by default. #+begin_src emacs-lisp :var data=unset-colnames-example-input data #+end_src #+RESULTS: | a | b | |---+---| | 1 | 2 | | 3 | 4 | If we wanted to unset this value, we could do the following. #+begin_src emacs-lisp :var data=unset-colnames-example-input :colnames () data #+end_src #+RESULTS: | 1 | 2 | | 3 | 4 | --=-=-= Content-Type: text/plain Cheers, > > Best regards, > Seb -- Eric Schulte http://cs.unm.edu/~eschulte --=-=-=--