Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-27 Thread Andrea Rossetti
Ciaran Mulloy  writes:
> Inserting the following as a field formula in location @2$3:   
> :='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) " ") 
> and doing a C-c or a C-u-C-c C-c generates an 'Invalid regexp: "Regular 
> expression too big"' error.
> 
> It seems that I can reliably reproduce a bug that I haven't been able to 
> find on forums and that most other people have difficulty replicating. 
> If I've done something to my installation of emacs I'd love to find out 
> what has caused the problem.
>
> Is there a way of determining what could be my issue?

Hello Ciaran,

  long story short: digging in org-table.el I noticed
that functions f1=`org-table-formula-handle-first/last-rc'
and f2=`org-table-formula-substitute-names' were used
sometimes like this: (f2 (f1 x)), and sometimes
like this: (f2 x). 

  I conjecture it should always be (f2 (f1 x)), so I applied
to my org-table.el, reloaded its definitions with `eval-buffer'
and... it worked! 

  File formula.diff attached here shows the exact changes
that I applied on my org-table.el. (if you try formula.diff
and it works for you, beware that you need to remove or recompile
the old org-table.elc file). 

diff -c "-L" "c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140804/org-table.el" "-L" "#" "c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140804/org-table.el" "c:/Users/andrea/AppData/Local/Temp/buffer-content-3236IUh"
*** c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140804/org-table.el
--- #
***
*** 2600,2606 
  	(unless (string-match "\\S-" fmt)
  	  (setq fmt nil
(if (and (not suppress-const) org-table-formula-use-constants)
! 	  (setq formula (org-table-formula-substitute-names formula)))
(setq orig (or (get-text-property 1 :orig-formula formula) "?"))
(while (> ndown 0)
  	(setq fields (org-split-string
--- 2600,2606 
  	(unless (string-match "\\S-" fmt)
  	  (setq fmt nil
(if (and (not suppress-const) org-table-formula-use-constants)
! 	  (setq formula (org-table-formula-substitute-names (org-table-formula-handle-first/last-rc formula
(setq orig (or (get-text-property 1 :orig-formula formula) "?"))
(while (> ndown 0)
  	(setq fields (org-split-string
***
*** 3767,3773 
(if (eq what 'name) (setq var (substring match 1)))
(when (eq what 'range)
  	(or (equal (string-to-char match) ?@) (setq match (concat "@" match)))
! 	(setq match (org-table-formula-substitute-names match)))
(unless local
  	(save-excursion
  	  (end-of-line 1)
--- 3767,3773 
(if (eq what 'name) (setq var (substring match 1)))
(when (eq what 'range)
  	(or (equal (string-to-char match) ?@) (setq match (concat "@" match)))
! 	(setq match (org-table-formula-substitute-names (org-table-formula-handle-first/last-rc match
(unless local
  	(save-excursion
  	  (end-of-line 1)

Diff finished.  Thu Aug 28 01:17:44 2014

  Hope it may be of some help, kindest regards.

  Andrea


Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-27 Thread Ciaran Mulloy

On 27/08/14 12:52, Nick Dokos wrote:

Ciaran Mulloy  writes:


Hi Nick,
Many thanks for your input.

The table I was trying was the example in the tutorial shown as follows
(not big) and no hint of a regex!:

| Col1 | Col2 | Col3 | Col4 | Col5 |
|--+--+--+--+--|
| a| a| :='(mapconcat 'identity (delete-dups (list @2$1..@>$1
@2$2..@>$2)) " ") | b|  |
| b| a|  |  |  |
| c| d|  |  |  |

#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1
@2$2..@>$2)) " ")



I'm not sure where you got this: the tutorial's table does not have a
field formula afaict. If you eliminate the field formula, the example
works - just do C-c C-c on the #+TBLFM: line:

--8<---cut here---start->8---
| Col1 | Col2 | Col3| Col4 | Col5 |
|--+--+-+--+--|
| a| a| | b|  |
| b| a| |  |  |
| c| d| |  |  |
#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) " 
")
--8<---cut here---end--->8---

I don't know why the field formula fails.


The version of emacs is GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, ) of
2013-07-27 on roseapple, modified by Debian
Org-mode version 7.9.3f (release_7.9.3f-17-g7524ef @
/usr/share/emacs/24.3/lisp/org/)


Hi Guys,
Some definite strangeness that I'd love to get to the bottom of, if only 
to preserve my sanity and understanding of how Org-Mode works!


The following is the example given in the excellent Worg tutorial on 
using Emacs Lisp in spreadsheet formulas: 
http://orgmode.org/worg/org-tutorials/org-spreadsheet-lisp-formulas.html



| Col1 | Col2 | Col3 | Col4 | Col5 |
|--+--+--+--+--|
| a| a|  | d|  |
| a| b|  |  |  |
| b| a|  |  |  |
| c| d|  |  |  |


Inserting the following as a field formula in location @2$3:   
:='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) " ") 
and doing a C-c or a C-u-C-c C-c generates an 'Invalid regexp: "Regular 
expression too big"' error.


I used the formula debug option C-{ to enable formula debugging and got 
the following result:



With the debugging formula on, when the debugger asks whether to 
continue on the newly entered formula I get the following output and the 
error is resolved and formula properly calculated as shown below.


This is the output provided by the formula debugger:

Substitution history of formula
Orig:   '(mapconcat 'identity (delete-dups (list @2$1..@5$1 @2$2..@5$2)) 
" ")
$xyz->  '(mapconcat 'identity (delete-dups (list @2$1..@5$1 @2$2..@5$2)) 
" ")
@r$c->  '(mapconcat 'identity (delete-dups (list #("a" 0 1 (fontified 
nil org-category "spreadsheets" face org-table)) #("a" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("b" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("c" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("a" 0 1 (fontified nil 
org-category "spreadsheets" face org-table)) #("b" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("a" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("d" 0 1 (fontified t 
org-category "spreadsheets" face org-table " ")
$1->'(mapconcat 'identity (delete-dups (list #("a" 0 1 (fontified 
nil org-category "spreadsheets" face org-table)) #("a" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("b" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("c" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("a" 0 1 (fontified nil 
org-category "spreadsheets" face org-table)) #("b" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("a" 0 1 (fontified t 
org-category "spreadsheets" face org-table)) #("d" 0 1 (fontified t 
org-category "spreadsheets" face org-table " ")

Result: a b c d
Format: NONE
Final:  a b c d



After The formula was correctly resolved and  shows the following result 
correctly:

| Col1 | Col2 | Col3| Col4 | Col5 |
|--+--+-+--+--|
| a| a| a b c d | d|  |
| a| b| |  |  |
| b| a| |  |  |
| c| d| |  |  |
#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
@2$2..@>$2)) " ")



The output in the messages file is as follows:
Loading 00debian-vars...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el 
(source)...done

Loading debian-ispell...done
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el 
(source)...done

Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done
For information about GNU Emacs and the GNU system, type C-h C-a.
Loading vc-git...done
Formula debugging has been turned on
R

Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-27 Thread Andrea Rossetti
Hello Ciaran,

  given your example:

> | Col1 | Col2 | Col3 | Col4 | Col5 |
> |--+--+--+--+--|
> | a| a| :='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
> @2$2..@>$2)) " ") | b|  |
> | b| a|  |  |  |
> | c| d|  |  |  |
> #+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
> @2$2..@>$2)) " ")

  I confirm I see your same hitting C-c C-c in the cell containing the
  formula. My setup is:

  - Org 8.2.7c
  - GNU Emacs 24.3.1 (i386-mingw-nt6.1.7600) of 2013-03-17 on MARVIN
  - Win 7

  Further observations I collected are:

  1) if I use "II-1" instead of ">" in the formula
 (though it's not exactly the same) it works properly.

  2) I tried to reduce the test case to a simpler formula:
 for example :='(length (list @2$1..@>$1)) gave me
 another, maybe more helpful error message:

 user-error: Spreadsheet error: invalid reference
 "'(length (list @2$1..@>$1))"

toggle-debug-on-error did not work for case 2) because
it's a "catched" error condition. Some random debugging 
made me think the problem lies in (or around) function
`org-table-get-range'. 

  Kindest regards,

  Andrea
 
  



Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-27 Thread ciaran_mulloy
On 27/08/14 08:21, Ciaran Mulloy wrote:
> On 27/08/14 03:52, Nick Dokos wrote:
>> Ciaran Mulloy  writes:
>>
>>> Hi!
>>> I was fascinated to work through the examples provided in the
>>> org-tutorials sections under Worg and really see the power of using
>>> eLisp as spreadsheet formula: http://orgmode.org/worg/
>>> org-tutorials/org-spreadsheet-lisp-formulas.html
>>>
>>> However the use of the mapconcat function always generated an error:
>>> Invalid regex "Regular expression too big", even with only a few
>>> terms in the formula.
>>>
>>> The offending formula was:
>>>
>>> #+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1
>>> @2$2..@>$2)) " ")
>>>
>>> I experimented with variations of the formula getting the same error
>>> every time.
>>>
>>> I did a search of the org-mode forum without finding any solution.
>>>
>>> Any thoughts?
>>>
>> I can't reproduce it - e.g. this
>>
>> --8<---cut here---start->8---
>> | one | two | three | four | five |
>> |-+-+---+--+--|
>> | a   | a   | a b c e f d g |  |  |
>> | a   | b   |   |  |  |
>> | b   | a   |   |  |  |
>> | c   | d   |   |  |  |
>> | e   | f   |   |  |  |
>> | f   | g   |   |  |  |
>> | a   | f   |   |  |  |
>> #+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1
>> @2$2..@>$2)) " ")
>> --8<---cut here---end--->8---
>>
>> works fine for me. This is with more-or-less latest org.
>>
>> Moreover, none of the functions used (mapconcat, identity, delete-dups
>> or list) use regexps at all. There is a chance that regexps are used by
>> the evaluator when building the ranges, but it's unlikely IMO, so the
>> regexp error seems like a red herring to me. How big a table did you
>> try? Did you try restarting emacs and redoing the evaluation? How about
>> starting emacs without any of your customizations and redoing the
>> evaluation? Something like this
>>
>>emacs -q -l /path/to/minimal/init /path/to/file/with/the/table
>>
>> where the minimal init file just sets load-path if necessary and
>> initializes org.
>>
> Hi Nick,
> Many thanks for your input.
> 
> The table I was trying was the example in the tutorial shown as follows
> (not big) and no hint of a regex!:
> 
> | Col1 | Col2 | Col3 | Col4 | Col5 |
> |--+--+--+--+--|
> | a| a| :='(mapconcat 'identity (delete-dups (list @2$1..@>$1
> @2$2..@>$2)) " ") | b|  |
> | b| a|  |  |  |
> | c| d|  |  |  |
> #+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1
> @2$2..@>$2)) " ")
> 
> 
> I did as you suggested and ran emacs -q -l ~/.emacs ~/path_to_file and
> got the same result as above:
> 
> org-table-eval-formula: Invalid regexp: "Regular expression too big"
> 
> The .emacs file is blank.
> 
> The version of emacs is GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, ) of
> 2013-07-27 on roseapple, modified by Debian
> Org-mode version 7.9.3f (release_7.9.3f-17-g7524ef @
> /usr/share/emacs/24.3/lisp/org/)
> 
> Using Mint 17 Xfce.
> 
> I don't think I'm doing something silly here but am at a loss to figure
> out the problem.
> 
> 
> 
Hi,
Further to my earlier posting, tried calculating the table on my PC in
work and it worked!

So I'm a little puzzled at what the differences are.


Configurations as follows:
GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, GTK+ Version 3.10.7) of
2014-03-07 on lamiak, modified by Debian
Org-mode version 7.9.3f (release_7.9.3f-17-g7524ef @
/usr/share/emacs/24.3/lisp/org/)
Cinnamon Mint 64 bit version 17






Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-27 Thread Nick Dokos
Ciaran Mulloy  writes:

> Hi Nick,
> Many thanks for your input.
>
> The table I was trying was the example in the tutorial shown as follows 
> (not big) and no hint of a regex!:
>
> | Col1 | Col2 | Col3 | Col4 | Col5 |
> |--+--+--+--+--|
> | a| a| :='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
> @2$2..@>$2)) " ") | b|  |
> | b| a|  |  |  |
> | c| d|  |  |  |
>
> #+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
> @2$2..@>$2)) " ")
>
>

I'm not sure where you got this: the tutorial's table does not have a
field formula afaict. If you eliminate the field formula, the example
works - just do C-c C-c on the #+TBLFM: line:

--8<---cut here---start->8---
| Col1 | Col2 | Col3| Col4 | Col5 |
|--+--+-+--+--|
| a| a| | b|  |
| b| a| |  |  |
| c| d| |  |  |
#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) 
" ")
--8<---cut here---end--->8---

I don't know why the field formula fails.

>
> The version of emacs is GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, ) of 
> 2013-07-27 on roseapple, modified by Debian
> Org-mode version 7.9.3f (release_7.9.3f-17-g7524ef @ 
> /usr/share/emacs/24.3/lisp/org/)
>

-- 
Nick




Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-27 Thread Ciaran Mulloy

On 27/08/14 03:52, Nick Dokos wrote:

Ciaran Mulloy  writes:


Hi!
I was fascinated to work through the examples provided in the org-tutorials 
sections under Worg and really see the power of using eLisp as spreadsheet 
formula: http://orgmode.org/worg/
org-tutorials/org-spreadsheet-lisp-formulas.html

However the use of the mapconcat function always generated an error: Invalid regex 
"Regular expression too big", even with only a few terms in the formula.

The offending formula was:

#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) " 
")

I experimented with variations of the formula getting the same error every time.

I did a search of the org-mode forum without finding any solution.

Any thoughts?


I can't reproduce it - e.g. this

--8<---cut here---start->8---
| one | two | three | four | five |
|-+-+---+--+--|
| a   | a   | a b c e f d g |  |  |
| a   | b   |   |  |  |
| b   | a   |   |  |  |
| c   | d   |   |  |  |
| e   | f   |   |  |  |
| f   | g   |   |  |  |
| a   | f   |   |  |  |
#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) " 
")
--8<---cut here---end--->8---

works fine for me. This is with more-or-less latest org.

Moreover, none of the functions used (mapconcat, identity, delete-dups
or list) use regexps at all. There is a chance that regexps are used by
the evaluator when building the ranges, but it's unlikely IMO, so the
regexp error seems like a red herring to me. How big a table did you
try? Did you try restarting emacs and redoing the evaluation? How about
starting emacs without any of your customizations and redoing the
evaluation? Something like this

   emacs -q -l /path/to/minimal/init /path/to/file/with/the/table

where the minimal init file just sets load-path if necessary and
initializes org.


Hi Nick,
Many thanks for your input.

The table I was trying was the example in the tutorial shown as follows 
(not big) and no hint of a regex!:


| Col1 | Col2 | Col3 | Col4 | Col5 |
|--+--+--+--+--|
| a| a| :='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
@2$2..@>$2)) " ") | b|  |

| b| a|  |  |  |
| c| d|  |  |  |
#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
@2$2..@>$2)) " ")



I did as you suggested and ran emacs -q -l ~/.emacs ~/path_to_file and 
got the same result as above:


org-table-eval-formula: Invalid regexp: "Regular expression too big"

The .emacs file is blank.

The version of emacs is GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, ) of 
2013-07-27 on roseapple, modified by Debian
Org-mode version 7.9.3f (release_7.9.3f-17-g7524ef @ 
/usr/share/emacs/24.3/lisp/org/)


Using Mint 17 Xfce.

I don't think I'm doing something silly here but am at a loss to figure 
out the problem.





Re: [O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-26 Thread Nick Dokos
Ciaran Mulloy  writes:

> Hi!
> I was fascinated to work through the examples provided in the org-tutorials 
> sections under Worg and really see the power of using eLisp as spreadsheet 
> formula: http://orgmode.org/worg/
> org-tutorials/org-spreadsheet-lisp-formulas.html
>
> However the use of the mapconcat function always generated an error: Invalid 
> regex "Regular expression too big", even with only a few terms in the formula.
>
> The offending formula was:
>
> #+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 
> @2$2..@>$2)) " ")
>
> I experimented with variations of the formula getting the same error every 
> time.
>
> I did a search of the org-mode forum without finding any solution.
>
> Any thoughts?
>

I can't reproduce it - e.g. this

--8<---cut here---start->8---
| one | two | three | four | five |
|-+-+---+--+--|
| a   | a   | a b c e f d g |  |  |
| a   | b   |   |  |  |
| b   | a   |   |  |  |
| c   | d   |   |  |  |
| e   | f   |   |  |  |
| f   | g   |   |  |  |
| a   | f   |   |  |  |
#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) 
" ")
--8<---cut here---end--->8---

works fine for me. This is with more-or-less latest org.

Moreover, none of the functions used (mapconcat, identity, delete-dups
or list) use regexps at all. There is a chance that regexps are used by
the evaluator when building the ranges, but it's unlikely IMO, so the
regexp error seems like a red herring to me. How big a table did you
try? Did you try restarting emacs and redoing the evaluation? How about
starting emacs without any of your customizations and redoing the
evaluation? Something like this

  emacs -q -l /path/to/minimal/init /path/to/file/with/the/table

where the minimal init file just sets load-path if necessary and
initializes org.

-- 
Nick




[O] Worg Tutorial error: using Emacs lisp as formulas

2014-08-26 Thread Ciaran Mulloy

Hi!
I was fascinated to work through the examples provided in the 
org-tutorials sections under Worg and really see the power of using 
eLisp as spreadsheet formula: 
http://orgmode.org/worg/org-tutorials/org-spreadsheet-lisp-formulas.html


However the use of the mapconcat function always generated an error: 
Invalid regex "Regular expression too big", even with only a few terms 
in the formula.


The offending formula was:

#+TBLFM: @2$3='(mapconcat 'identity (delete-dups (list @2$1..@>$1 @2$2..@>$2)) " 
")


I experimented with variations of the formula getting the same error 
every time.


I did a search of the org-mode forum without finding any solution.

Any thoughts?

Regard