emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [babel] passing strings in


From: Thomas S. Dye
Subject: Re: [Orgmode] [babel] passing strings in
Date: Thu, 25 Mar 2010 09:05:26 -1000


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

"Eric Schulte" <address@hidden> 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
<address@hidden> 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.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
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 via email to

[Prev in Thread] Current Thread [Next in Thread]