Re: [O] Worg Tutorial error: using Emacs lisp as formulas
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
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
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
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
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
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
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
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