Re: [O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2017-09-07 Thread Nicolas Goaziou
Alex Bennée  writes:

> So more correctly when org-confirm-babel-evaluate is set it breaks due
> to info not containing a character position for the TBLFM code. I fixed
> this by patching org-babel-check-confirm-evaluate:
>
> modified   lisp/ob-core.el
> @@ -242,7 +242,8 @@ should be asked whether to allow evaluation."
>   (and export (equal eval "query-export"))
>   (if (functionp org-confirm-babel-evaluate)
>   (save-excursion
> -   (goto-char (nth 5 info))
> +   (when (nth 5 info)
> + (goto-char (nth 5 info)))
> (funcall org-confirm-babel-evaluate
>  ;; language, code block body
>  (nth 0 info) (nth 1 info)))
>
> I'm not sure the goto-char is legitimate anyway as the documentation for
> org-confirm-babel-evaluate says nothing about point being set while it
> executes.

I agree and removed `goto-char'. Thank you for the analysis and the
patch.

Regards,



Re: [O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2017-09-07 Thread Alex Bennée

Alex Bennée  writes:

> Nicolas Goaziou  writes:
>
>> Hello,
>>
>> Alex Bennée  writes:
>>
>>> So calling scramble-string works as expected...
>>>
>>> #+tblname: reversed-strings
>>> | abcde   | #ERROR |
>>>
>>> | flibble | #ERROR |
>>> | dibble  | #ERROR |
>>> | xyzzy   | #ERROR |
>>> | another | #ERROR |
>>>
>>> #+TBLFM: $2='(org-sbe scramble-string (str $$1))
>>
>> I cannot reproduce it. I get:
>
> Hmm it turns out this interferes:
>
> ;; See 
> http://emacs.stackexchange.com/questions/499/finding-and-executing-org-babel-snippets-programatically
> (defun my-babel-hashed-confirm (lang body)

>
> (setq org-confirm-babel-evaluate 'my-babel-hashed-confirm)
>
> Resetting to org-confirm-babel-evaluate to nil and it works.

So more correctly when org-confirm-babel-evaluate is set it breaks due
to info not containing a character position for the TBLFM code. I fixed
this by patching org-babel-check-confirm-evaluate:

modified   lisp/ob-core.el
@@ -242,7 +242,8 @@ should be asked whether to allow evaluation."
(and export (equal eval "query-export"))
(if (functionp org-confirm-babel-evaluate)
(save-excursion
- (goto-char (nth 5 info))
+ (when (nth 5 info)
+   (goto-char (nth 5 info)))
  (funcall org-confirm-babel-evaluate
   ;; language, code block body
   (nth 0 info) (nth 1 info)))

I'm not sure the goto-char is legitimate anyway as the documentation for
org-confirm-babel-evaluate says nothing about point being set while it
executes.

--
Alex Bennée



Re: [O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2017-09-06 Thread Alex Bennée

Nicolas Goaziou  writes:

> Hello,
>
> Alex Bennée  writes:
>
>> So calling scramble-string works as expected...
>>
>> #+tblname: reversed-strings
>> | abcde   | #ERROR |
>>
>> | flibble | #ERROR |
>> | dibble  | #ERROR |
>> | xyzzy   | #ERROR |
>> | another | #ERROR |
>>
>> #+TBLFM: $2='(org-sbe scramble-string (str $$1))
>
> I cannot reproduce it. I get:

Hmm it turns out this interferes:

;; See 
http://emacs.stackexchange.com/questions/499/finding-and-executing-org-babel-snippets-programatically
(defun my-babel-hashed-confirm (lang body)
  "Check against known hashes before prompting for confirmation.
See `org-confirm-babel-evaluate'."
  (let ((check (list lang (md5 body
;; If not hashed, prompt
(if (not (member check my-org-babel-hashes))
;; Ask if you want to hash
(if (yes-or-no-p "Store hash for block? ")
;; Hash is added, proceed with evaluation
(progn
  (add-to-list 'my-org-babel-hashes check)
  'nil)
  ;; Return 't to prompt for evaluation
  't)
  (message "Valid hash auto-confirmed")
  'nil)))

(setq org-confirm-babel-evaluate 'my-babel-hashed-confirm)

Resetting to org-confirm-babel-evaluate to nil and it works.

>
> #+name: reversed-strings
> | abcde   | edcba   |
> | flibble | elbbilf |
> | dibble  | elbbid  |
> | xyzzy   | yzzyx   |
> | another | rehtona |
> #+TBLFM: $2='(org-sbe scramble-string (str $$1))
>
>> Even calling org-sbe directly from a source block:
>>
>> #+name: call-scramble-string-via-sbe
>> #+begin_src emacs-lisp :var val="thing"
>>
>> (org-sbe scramble-string (str val))
>> #+end_src
>
> AFAIK, `org-sbe' is limited to tables.

I was trying to replicate the way TBLFM compiles the macro.

>
> Regards,


--
Alex Bennée



Re: [O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2017-09-06 Thread Nicolas Goaziou
Hello,

Alex Bennée  writes:

> So calling scramble-string works as expected...
>
> #+tblname: reversed-strings
> | abcde   | #ERROR |
>
> | flibble | #ERROR |
> | dibble  | #ERROR |
> | xyzzy   | #ERROR |
> | another | #ERROR |
>
> #+TBLFM: $2='(org-sbe scramble-string (str $$1))

I cannot reproduce it. I get:

#+name: reversed-strings
| abcde   | edcba   |
| flibble | elbbilf |
| dibble  | elbbid  |
| xyzzy   | yzzyx   |
| another | rehtona |
#+TBLFM: $2='(org-sbe scramble-string (str $$1))

> Even calling org-sbe directly from a source block:
>
> #+name: call-scramble-string-via-sbe
> #+begin_src emacs-lisp :var val="thing"
>
> (org-sbe scramble-string (str val))
> #+end_src

AFAIK, `org-sbe' is limited to tables.

Regards,

-- 
Nicolas Goaziou



Re: [O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2017-09-06 Thread Alex Bennée

Nicolas Goaziou  writes:

> Hello,
>
> Frederick Giasson  writes:
>
>> Now, if I put a string in the format column, I al getting the following:
>>
>> 
>>
>> #+NAME: average-dataset-size
>> #+BEGIN_SRC clojure :var f="turtle" :exports none :results value
>> (identity f) #+END_SRC
>>
>> #+RESULTS: average-dataset-size
>> : turtle
>>
>>
>> | Format | Sizes distribution in MB | Average size in MB |
>> |+--+|
>> | turtle |  | #ERROR |
>> #+TBLFM: $3='(org-sbe "average-dataset-size" (f $1))
>>
>> 
>
> According to `org-sbe' docstring, it should be
>
>   #+TBLFM: $3='(org-sbe "average-dataset-size" (f $$1))
>
> Documentation could be drastically improved in that area, the manual is
> not even talking about `org-sbe'.

Even this doesn't seem to work. In my case:

#+name: scramble-string
#+begin_src emacs-lisp :var str="abcde"
  (apply #'string
 (reverse
  (string-to-list str)))
#+end_src

#+RESULTS: scramble-string
: edcba

So far so good

#+call: scramble-string(str="whatever-foo")

#+RESULTS:
: oof-revetahw

So calling scramble-string works as expected...

#+tblname: reversed-strings
| abcde   | #ERROR |
| flibble | #ERROR |
| dibble  | #ERROR |
| xyzzy   | #ERROR |
| another | #ERROR |
#+TBLFM: $2='(org-sbe scramble-string (str $$1))

Hmm no dice... the debugger lists:

Substitution history of formula
Orig:   '(org-sbe scramble-string (str $$1))
$xyz->  '(org-sbe scramble-string (str $$1))
@r$c->  '(org-sbe scramble-string (str $$1))
$1->'(org-sbe scramble-string (str $"abcde"))
Result: #ERROR
Format: NONE
Final:  #ERROR

Even calling org-sbe directly from a source block:

#+name: call-scramble-string-via-sbe
#+begin_src emacs-lisp :var val="thing"
(org-sbe scramble-string (str val))
#+end_src

So is this just broken untested functionality or are there any working
examples from which we could reverse engineer the proper docstring?

--
Alex Bennée



Re: [O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2016-06-22 Thread Nicolas Goaziou
Hello,

Frederick Giasson  writes:

> Now, if I put a string in the format column, I al getting the following:
>
> 
>
> #+NAME: average-dataset-size
> #+BEGIN_SRC clojure :var f="turtle" :exports none :results value
> (identity f) #+END_SRC
>
> #+RESULTS: average-dataset-size
> : turtle
>
>
> | Format | Sizes distribution in MB | Average size in MB |
> |+--+|
> | turtle |  | #ERROR |
> #+TBLFM: $3='(org-sbe "average-dataset-size" (f $1))
>
> 

According to `org-sbe' docstring, it should be

  #+TBLFM: $3='(org-sbe "average-dataset-size" (f $$1))

Documentation could be drastically improved in that area, the manual is
not even talking about `org-sbe'.

Regards,

-- 
Nicolas Goaziou



[O] Table (used a "spreadsheet") org-sbe issues when the value is a string

2016-06-22 Thread Frederick Giasson

Hi Everybody,

I am experiencing a few issues trying to update a cell value using 
=org-sbe= when the value of a column is a string.


Here is an example that works when the value is a number:




#+NAME: average-dataset-size
#+BEGIN_SRC clojure :var f="turtle" :exports none :results value
(identity f)
#+END_SRC

#+RESULTS: average-dataset-size
: turtle


| Format | Sizes distribution in MB | Average size in MB |
|+--+|
|  7 |  |  7 |
#+TBLFM: $3='(org-sbe "average-dataset-size" (f $1))



Now, if I put a string in the format column, I al getting the following:



#+NAME: average-dataset-size
#+BEGIN_SRC clojure :var f="turtle" :exports none :results value
(identity f)
#+END_SRC

#+RESULTS: average-dataset-size
: turtle


| Format | Sizes distribution in MB | Average size in MB |
|+--+|
| turtle |  | #ERROR |
#+TBLFM: $3='(org-sbe "average-dataset-size" (f $1))



The debugging session I have is (which doesn't tell me with Result: is 
#ERROR):




Substitution history of formula
Orig:   ?
$xyz->  '(org-sbe "average-dataset-size" (f $1))
@r$c->  '(org-sbe "average-dataset-size" (f $1))
$1->'(org-sbe "average-dataset-size" (f "turtle"))
Result: #ERROR
Format: NONE
Final:  #ERROR




Note #1: (identity) is a function in Clojure that returns the same value 
that is in input.



I am wondering if this is a bug, or something that I am missing in how 
to use these features?



Thanks for helping,


Fred