Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Eric Schulte
Dan Davison  writes:

> Dan Davison  writes:
>

[...]

>> Hi Eric,
>>
>> Thanks for the much better answer. I think my vote goes for your second
>> option.
>
> Actually, although I think what I said below is valid, it's much less
> obvious what a good solution is because I completely ignored the
> (common) possibility of referring to a table:
>
> :var x=tablename
>
> In that case it is less appealing, although a possibility, to demand
> that we write :var x=tablename()  [1]
>

My problem with this path is that then we can't pass a string value into
a variable in which the last two characters are "(" and ")" because it
would be interpreted as a reference.  I'm liking the current solution at
http://eschulte.github.com/babel-dev/DONE-literal-values-from-tables.html

Cheers -- Eric


___
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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Dan Davison
Dan Davison  writes:

> "Eric Schulte"  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.

Actually, although I think what I said below is valid, it's much less
obvious what a good solution is because I completely ignored the
(common) possibility of referring to a table:

:var x=tablename

In that case it is less appealing, although a possibility, to demand
that we write :var x=tablename()  [1]

However, I do still feel that having to quote the strings in Maurizio's
example is unfortunate -- so my current position is not very helpful:
I'm not sure what a good solution is.

Dan

Footnotes:

[1] There are two cases:
1. Normal org table not associated with code block
2. Table created by code block

In the case of (2) it makes some sense to use the name() notation
because the same name is used to name the results table as is used to
name the code block which generates the table.

> 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
>>  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



___
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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Thomas S. Dye


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


"Eric Schulte"  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
 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


___
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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Maurizio Vitale
> "Dan" == Dan Davison  writes:

Dan> Maurizio Vitale
Dan> 
Dan> writes:

>> In the table/block pair below, I'm trying to pass an IP number to
>> some shell code.

Dan> Hi Maurizio,

Dan> I think you've forgotten to specify that 'ip' is an argument of
Dan> the system-ping block. So either add e.g. :var ip=0 or use
Dan> #+source: system-ping(ip=0) (You can of course use any default
Dan> argument value other than 0)

I used to have the argument specification. But then discovered it was
working without and since I didn't have a need for a default value, I
removed it.

Maybe this work accidentally and it is not supported.

Dan> Additionally, I'm finding that the ip column needs to be
Dan> single-quoted (whether it is an IP number or a human-readable
Dan> alias). I'm rushing a bit at the moment, but that looks like a
Dan> bug.

Dan> So in any case, this works for me (also works with
Dan> single-quoted IP numbers)

Thanks! 


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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Maurizio Vitale
> "Eric" == Eric Schulte  writes:

Eric> Hi Maurizio, The ip addresses in your table are being
Eric> interpreted as source/reference names which org-babel is
Eric> trying to resolve.  In order to differentiate between strings
Eric> and reference names, we either must surround all strings in
Eric> double quotes (as below) or we must end all references with
Eric> "()" and disallow any strings which end in "()".  Currently we
Eric> are taking the former approach, which means your table will
Eric> require the following to work...

That was a quick replay! Thanks.

If I understand you, the problem is not with org-babel, but with
org-mode itself expanding column references. In this case, wouldn't it
be possible to consider a general "quoting" mechanism preventing that
expansion? obviously "'" cannot be used, but maybe $$2 could be made to
mean "threat the value literally".

I'd be ok with the quotes in the source, but they look terrible in
exported documents.

Anyhow, I can live with the workaround you suggested.
Thanks again,

   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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Eric Schulte
Hi Maurizio,

Thanks for the "$$" suggestion, I think that sounds like the simplest
solution.  I've just applied it, so your original table should now work
if you double the "$" before the column number.

Dan, I think this is preferable to forcing the addition of "()" for
interpretation as a reference both for reasons of backwards
compatibility, and also I somehow feel that reference interpretation by
default and string interpretation only in the presence of double quotes
is somehow more intuitive and natural.  Definitely an open area for
discussion...

Thanks -- Eric

Maurizio Vitale  writes:

>> "Eric" == Eric Schulte  writes:
>
> Eric> Hi Maurizio, The ip addresses in your table are being
> Eric> interpreted as source/reference names which org-babel is
> Eric> trying to resolve.  In order to differentiate between strings
> Eric> and reference names, we either must surround all strings in
> Eric> double quotes (as below) or we must end all references with
> Eric> "()" and disallow any strings which end in "()".  Currently we
> Eric> are taking the former approach, which means your table will
> Eric> require the following to work...
>
> That was a quick replay! Thanks.
>
> If I understand you, the problem is not with org-babel, but with
> org-mode itself expanding column references. In this case, wouldn't it
> be possible to consider a general "quoting" mechanism preventing that
> expansion? obviously "'" cannot be used, but maybe $$2 could be made to
> mean "threat the value literally".
>
> I'd be ok with the quotes in the source, but they look terrible in
> exported documents.
>
> Anyhow, I can live with the workaround you suggested.
> Thanks again,
>
>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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Dan Davison
"Eric Schulte"  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
>  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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Dan Davison
Maurizio Vitale
 writes:

> In the table/block pair below, I'm trying to pass an IP number to some
> shell code.

Hi Maurizio,

I think you've forgotten to specify that 'ip' is an argument of the
system-ping block. So either add e.g. :var ip=0 or use
#+source: system-ping(ip=0) (You can of course use any default argument value 
other than 0)

Additionally, I'm finding that the ip column needs to be single-quoted
(whether it is an IP number or a human-readable alias). I'm rushing a
bit at the moment, but that looks like a bug.

So in any case, this works for me (also works with single-quoted IP
numbers)

| name   | ip | ping |
|++--|
| host 1 | 'orgmode.org'  |0 |
| host 2 | 'xorgmode.org' |2 |
#+TBLFM: $3='(sbe system-ping (ip $2))

#+source: system-ping(ip=0)
#+begin_src sh
ping -w 10 -c 1 -q $ip >/dev/null 2>&1
echo $?
#+end_src

Dan


> 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


Re: [Orgmode] [babel] passing strings in

2010-03-25 Thread Eric Schulte
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 "()".  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
 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


[Orgmode] [babel] passing strings in

2010-03-25 Thread Maurizio Vitale

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