emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Thomas S. Dye" <tsd@tsdye.com>
To: Dan Davison <davison@stats.ox.ac.uk>
Cc: maurizio.vitale@polymath-solutions.com, emacs-orgmode@gnu.org
Subject: Re: [babel] passing strings in
Date: Thu, 25 Mar 2010 09:05:26 -1000	[thread overview]
Message-ID: <DAB648CC-AE50-41B1-BC78-72E54DEB1486@tsdye.com> (raw)
In-Reply-To: <87ljdgxs6s.fsf@stats.ox.ac.uk>


On Mar 25, 2010, at 6:49 AM, Dan Davison wrote:

> "Eric Schulte" <schulte.eric@gmail.com> writes:
>
>> Hi Maurizio,
>>
>> The ip addresses in your table are being interpreted as source/ 
>> reference
>> names which org-babel is trying to resolve.  In order to  
>> differentiate
>> between strings and reference names, we either must surround all  
>> strings
>> in double quotes (as below) or we must end all references with "()"  
>> and
>> disallow any strings which end in "()".
>
> Hi Eric,
>
> Thanks for the much better answer. I think my vote goes for your  
> second
> option. In other words, :var x=blockname passes the string  
> "blockname",
> whereas :var x=blockname() passes the result of evaluating a block
> called "blockname".
>
> One argument for this is that in order to pass arguments to a block
> being evaluated as a reference, users are already obliged to use the
> parenthetic function call syntax:
>
> :var x=blockname(arg1=val1)
>
> so demanding the parentheses in the absence of arguments is natural  
> (and
> perhaps even serves to remind users of the possibility of passing
> arguments).
>
> Also I think that users will probably pass strings more often than  
> they
> will pass the results of block reference evaluations, so
> interpreting :var=blockname as a string literal may also be  
> justified by
> Least Surprise for naive users (e.g. apparently me...).
>
> Dan
>
>
>
>
>> Currently we are taking the
>> former approach, which means your table will require the following to
>> work...
>>
>> #+TBLNAME: system-host-ping :var host=system-hosts
>> | name   | ip               |           ping |
>> |--------+------------------+----------------|
>> | host 1 | "192.168.10.200" | 192.168.10.200 |
>> | host 2 | "192.168.10.24"  |  192.168.10.24 |
>> | host 3 | "192.168.42.24"  |  192.168.42.24 |
>> #+TBLFM: $3='(sbe system-ping (ip $2))'
>>
>> #+source: system-ping
>> #+begin_src sh :var ip=0
>> # This is what I eventually want
>> #ping -w 10 -c 1 -q $ip >/dev/null 2>&1
>> #echo $?
>>
>> # Testing
>> echo $ip
>> #+end_src
>>
>> I'd be open to discussion on this issue.  I suppose if reference
>> resolution fails we could try using the name as a string literal, but
>> that could lead to debugging nightmares...
>>
>> Cheers -- Eric
>>
>> Maurizio Vitale
>> <mav@cuma.i-did-not-set--mail-host-address--so-tickle-me> writes:
>>
>>> In the table/block pair below, I'm trying to pass an IP number to  
>>> some
>>> shell code. It seems like in the table formula I can only have
>>> numbers. Is that right?
>>>
>>> #+TBLNAME: system-host-ping :var host=system-hosts
>>> | name      |             ip | ping   |
>>> |-----------+----------------+--------|
>>> | host 1    | 192.168.10.200 | #ERROR |
>>> | host 2    |  192.168.10.24 | #ERROR |
>>> | host 3    |  192.168.42.24 | #ERROR |
>>> #+TBLFM: $3='(sbe system-ping (ip $2))'
>>>
>>> #+source: system-ping
>>> #+begin_src sh
>>> # This is what I eventually want
>>> #ping -w 10 -c 1 -q $ip >/dev/null 2>&1
>>> #echo $?
>>>
>>> # Testing
>>> echo $ip
>>> #+end_src
>>>
>>> Any way to pass arbitrary strings?
>>>
>>> Thanks a lot,
>>>
>>>       Maurizio
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Emacs-orgmode mailing list
>>> Please use `Reply All' to send replies to the list.
>>> Emacs-orgmode@gnu.org
>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>>
>>
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Please use `Reply All' to send replies to the list.
>> Emacs-orgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

Aloha all,

Would it be useful to interpret arguments like this?

arg -> interpretation
-------------------
"string" -> string
"reference()" -> string
reference -> string
reference() - reference

If reference resolution fails then an error could be raised  
unambiguously.

All the best,
Tom

  reply	other threads:[~2010-03-25 19:05 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-25 15:21 [babel] passing strings in Maurizio Vitale
2010-03-25 16:00 ` Eric Schulte
2010-03-25 16:17   ` Maurizio Vitale
2010-03-25 17:12     ` Eric Schulte
2010-03-25 16:49   ` Dan Davison
2010-03-25 19:05     ` Thomas S. Dye [this message]
2010-03-25 19:23     ` Dan Davison
2010-03-25 19:48       ` Eric Schulte
2010-03-25 16:09 ` Dan Davison
2010-03-25 16:21   ` Maurizio Vitale

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DAB648CC-AE50-41B1-BC78-72E54DEB1486@tsdye.com \
    --to=tsd@tsdye.com \
    --cc=davison@stats.ox.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    --cc=maurizio.vitale@polymath-solutions.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).