From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Sebastien Vauban" Subject: Re: [RFC] Standardized code block keywords Date: Fri, 21 Oct 2011 10:17:56 +0200 Message-ID: <80hb32vjuz.fsf@somewhere.org> References: <87pqhrih3s.fsf@gmail.com> <30891.1319141196@alphaville.dokosmarshall.org> <87fwinifqu.fsf@gmail.com> <32184.1319143892@alphaville.dokosmarshall.org> <808vofwf1w.fsf@somewhere.org> <87y5wfgwn7.fsf_-_@gmail.com> <8895.1319165867@alphaville.dokosmarshall.org> Mime-Version: 1.0 Content-Type: text/plain Return-path: 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-mXXj517/zsQ@public.gmane.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org-mXXj517/zsQ@public.gmane.org To: emacs-orgmode-mXXj517/zsQ@public.gmane.org Hi Nick, Tom, Eric and all, Nick Dokos wrote: > Thomas S. Dye wrote: >> Eric Schulte writes: >> >>>> [1] I have the same "annoying" feelings with #+SOURCE, #+SRCNAME, #+FUNCTION, >>>> #+CALL, #+LOB, and SBE, some of which are interchangeable; some >>>> not. I'd prefer deprecating an old form when a better one is found. >>> >>> This point of view has been raised previously both on the mailing list >>> and in the #org-mode IRC chat room. I think it is time that we decided as >>> a community what we want to do about the prevalence of code block >>> synonyms -- we should make this decision before the release of Emacs24 >>> after which syntax will become harder to change. Thanks for tackling this. >>> There are currently a number of instances of synonymous keywords when >>> dealing with code blocks, specifically. >>> >>> named code blocks [1] -- "source" "srcname" "function" >>> calling external functions [2] -- "call" "lob" >>> named data [3] -- "tblname" "resname" "results" "data" >>> >>> Ideally if we limit each of the above to only one alternative we could >>> simplify the specification of code blocks in Org-mode making them easier >>> to learn and use and removing some of the mystery around their syntax. >>> >>> What does everyone think? >>> >>> Are there suggestions for the best names for each code block entity >>> (either in the list or not in the list)? >>> >>> Are there cases where we want to continue to allow synonyms (e.g., in >>> named data so that "results" can be used for code block results but >>> "data" can be used for hand-written data)? >>> >>> Thanks -- Eric >>> >>> Footnotes: >>> [1] named code blocks >>> >>> #+source: foo >>> #+begin_src emacs-lisp >>> 'foo >>> #+end_src >>> >>> #+srcname: foo >>> #+begin_src emacs-lisp >>> 'foo >>> #+end_src >>> >>> #+function: foo >>> #+begin_src emacs-lisp >>> 'foo >>> #+end_src >>> >>> [2] calling external functions >>> >>> #+call: foo() >>> >>> #+lob: foo() >>> >>> [3] named data >>> >>> #+data: something >>> : something >>> #+results: something >>> : something >>> >>> etc... >> >> named code blocks [1] "source" >> calling external functions [2] "call" >> named data [3] "object" >> >> My motivation for [3] "object" instead of the suggested alternates is the >> hope that it will be possible to name things like lists and paragraphs >> (that aren't results or data) and pass these objects to source code blocks. > > I disagree with Tom on [1]: it should clearly be "srcname", in analogy > to #+tblname - and also so I don't have to change my files :-} (but see my > question about tblname below). I have low attraction for "function" as this seems too-programming oriented: IMHO, it's too much minded toward the "results value" aspect of Babel ("functional mode"), and not at all toward the "scripting mode" (shell scripts, SQL commands). Moreover, in fact, in such blocks, we don't have executable code per se: just think at Ledger transactions that I would want to wrap... #+srcname: journal #+begin_src ledger 2008/01/03 * ( ) ME Assets:Bank:Checking:799997045030 550.00 EUR Assets:Bank:Transferred 2008/01/01 * ( ) UNKNOWN-PAYEE Assets:Bank:Checking:799997045030 21.91 EUR Expenses:Unknown #+end_src ..., and reuse in a block later (through the Noweb expansion): #+srcname: ledger-balance #+begin_src ledger :cmdline bal :noweb yes <> #+end_src Though, in this latter case, one could object I could maybe (?) refer them through the "object" name facility -- I'm referring to point 3 of Tom's answer, see below. Note -- Then, I would loose the language-editing facility. When we create an "object" ("results" or "data"), there is no "language" associated, hence no ability to edit easily via C-c ', and no correct "native fontification". In fact, such an object has no delimiter either, so it would never be a true replacement. Now, between "srcname" and "source": I'm used to whatever my Yasnippet is entering for me. That's currently "srcname". I don't have a strong opinion, though, to choose one over the other, except that I like Nick's argument with the table analogy. > I agree on [2] "call". I clearly agree on "call" as well. Here, I'd like to ask: what about "sbe"? In my own understanding, it's a call, absolutely similar to "call". Is there a technical reason to be forced to differentiate both? If no, can we use "call" as well instead of "sbe"? > I'm confused by [3] so I will say nothing for now, except to ask some > questions: are we talking about what a human would use to label a piece of > data for consumption by a block (including perhaps the future possibilities > of lists and paragraphs that Tom brought up)? what babel would use to label > a results block (possibly so that it could be consumed by another block in a > chain)? both? would that mean that #+tblname would go the way of the dodo > and that tables would be labelled with #+data (or #+object or whatever else > we come up with)? For point 3, Eric, I guess that whichever term is chosen, that does not mean that "results" will change (I mean: when it's a result of a block execution)? In other words, if we choose for "object", we still will have the possibility to use "results" (automatically generated) and "object" to refer to something we want to use in another call? >>> named data [3] -- "tblname" "resname" "results" "data" I don't specifically like "resname". I would keep "results" for automatically generated "results". I do like "data", but can learn to like "object" as a more generic term, future-proof for coming extensions. Last remark: we could get one step further and wonder if it wouldn't be good to impose a single way to pass variables? We currently have two different mechanisms: #+srcname: convert-date-to-French-format #+begin_src sql :var column="" CONVERT(varchar(10), $column, 103) AS $column #+end_src and #+srcname: convert-date-to-French-format(column="") #+begin_src sql CONVERT(varchar(10), $column, 103) AS $column #+end_src I guess that the first one is easier if we want to construct complex variable values (which call Emacs Lisp code or such), but... Thanks for your comments... Best regards, Seb -- Sebastien Vauban