GNU bug report logs - #26169
25.1; ses.el string cell recalculate message

Previous Next

Package: emacs;

Reported by: Kevin Ryde <user42_kevin <at> yahoo.com.au>

Date: Sun, 19 Mar 2017 05:03:01 UTC

Severity: minor

Found in version 25.1

To reply to this bug, email your comments to 26169 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Sun, 19 Mar 2017 05:03:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Kevin Ryde <user42_kevin <at> yahoo.com.au>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 19 Mar 2017 05:03:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Kevin Ryde <user42_kevin <at> yahoo.com.au>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.1; ses.el string cell recalculate message
Date: Sun, 19 Mar 2017 16:02:01 +1100
In debian packaged emacs 25.1.1, starting "emacs -Q /tmp/foo.ses"

   " Ret            # create a cell with a string
   hello Ret        # the string content
   C-p              # move point to that cell
   c                # ses-recalculate-cell
   =>
   Format specifier doesn't match argument type: A1

I expected recalc on a string cell to leave it unchanged.
The message looks like a caught error, but I don't know if it's
something bad or merely unsightly.  The same happens in emacs 24.

Occasionally I've had c on a string cell clear it to nil.  I'll see if I
can make something reproducable for that, if it could be related.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Thu, 20 Aug 2020 16:23:02 GMT) Full text and rfc822 format available.

Message #8 received at 26169 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Kevin Ryde <user42_kevin <at> yahoo.com.au>
Cc: Vincent Belaïche <vincentb1 <at> users.sourceforge.net>,
 26169 <at> debbugs.gnu.org
Subject: Re: bug#26169: 25.1; ses.el string cell recalculate message
Date: Thu, 20 Aug 2020 18:22:11 +0200
Kevin Ryde <user42_kevin <at> yahoo.com.au> writes:

> In debian packaged emacs 25.1.1, starting "emacs -Q /tmp/foo.ses"
>
>    " Ret            # create a cell with a string
>    hello Ret        # the string content
>    C-p              # move point to that cell
>    c                # ses-recalculate-cell
>    =>
>    Format specifier doesn't match argument type: A1
>
> I expected recalc on a string cell to leave it unchanged.
> The message looks like a caught error, but I don't know if it's
> something bad or merely unsightly.  The same happens in emacs 24.
>
> Occasionally I've had c on a string cell clear it to nil.  I'll see if I
> can make something reproducable for that, if it could be related.

I had a peek at ses.el (a package I don't use regularly), and something
like the following fixes the problem, but is probably totally the wrong
solution.

I've Cc'd the maintainer on this -- Vincent?

diff --git a/lisp/ses.el b/lisp/ses.el
index 96b219fc60..e396cc72ac 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -1231,7 +1231,9 @@ ses-print-cell
                     (ses--col col))
                 (ses-call-printer (or printer
                                       (ses-col-printer col)
-                                      ses--default-printer)
+                                      (if (stringp value)
+                                          "%7s"
+                                        ses--default-printer))
                                   value)))
 	(if (consp ses-call-printer-return)
 	    ;; Printer returned an error.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Mon, 24 Aug 2020 14:21:01 GMT) Full text and rfc822 format available.

Message #11 received at 26169 <at> debbugs.gnu.org (full text, mbox):

From: Vincent Belaïche <vincent.belaiche <at> gmail.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Vincent Belaïche <vincentb1 <at> users.sourceforge.net>,
 Kevin Ryde <user42_kevin <at> yahoo.com.au>, 26169 <at> debbugs.gnu.org
Subject: Re: bug#26169: 25.1; ses.el string cell recalculate message
Date: Mon, 24 Aug 2020 16:20:17 +0200
Hello Lars,

The root cause is that the default printer is "%.7g". This printer
being a string it is equivalent for (lambda (x) (format xxxx x)),
where xxxx is the concerned string, ie "%.7g".

That default printer comes from the const ses-initial-file-contents,
which hard wires the default printer to "%.7g".

So you can just change your spreadsheet not to get the error by
setting "%s" as a printer to cell A1 (just press p, then "%s", and
then RET). You can also change the default column printer with M-p, or
the default spreadsheet printer with C-c C-p.

A better fix would certainly to accept a new printer format that
instead of a string would be some sort of expression structure that
would map a format string to some predicate, where the predicates
could only be one of stringp , numberp. It could be something

'(printers (stringp . "%s") (numberp . "%.7g"))

So the code would check it for being safe (not to allow viruses on
load) this way

(mapc (lambda (x) (or (and (memq (car x) '(stringp numberp)) (stringp
(cdr x)) (errror "Unsafe printer %S" x))
   yyyy)

where yyyy would be the desired value '(printers (stringp . "%s")
(numberp . "%.7g")).

Well, probably what sort of structure we want to accommodate needs
some more thinking.

  Vincent.

PS : I cannot make the fix straight away, my personal PC ethernet card
has been broken by the latest storm overvoltage, and the other PC
having my credentials is also under repair after overheating damaged
the connectors (well, nothing surprising as this was a MACbook pro, a
notable unreliable sort of machine wrt to thermal extreme conditions).

Le jeu. 20 août 2020 à 18:22, Lars Ingebrigtsen <larsi <at> gnus.org> a écrit :
>
> Kevin Ryde <user42_kevin <at> yahoo.com.au> writes:
>
> > In debian packaged emacs 25.1.1, starting "emacs -Q /tmp/foo.ses"
> >
> >    " Ret            # create a cell with a string
> >    hello Ret        # the string content
> >    C-p              # move point to that cell
> >    c                # ses-recalculate-cell
> >    =>
> >    Format specifier doesn't match argument type: A1
> >
> > I expected recalc on a string cell to leave it unchanged.
> > The message looks like a caught error, but I don't know if it's
> > something bad or merely unsightly.  The same happens in emacs 24.
> >
> > Occasionally I've had c on a string cell clear it to nil.  I'll see if I
> > can make something reproducable for that, if it could be related.
>
> I had a peek at ses.el (a package I don't use regularly), and something
> like the following fixes the problem, but is probably totally the wrong
> solution.
>
> I've Cc'd the maintainer on this -- Vincent?
>
> diff --git a/lisp/ses.el b/lisp/ses.el
> index 96b219fc60..e396cc72ac 100644
> --- a/lisp/ses.el
> +++ b/lisp/ses.el
> @@ -1231,7 +1231,9 @@ ses-print-cell
>                      (ses--col col))
>                  (ses-call-printer (or printer
>                                        (ses-col-printer col)
> -                                      ses--default-printer)
> +                                      (if (stringp value)
> +                                          "%7s"
> +                                        ses--default-printer))
>                                    value)))
>         (if (consp ses-call-printer-return)
>             ;; Printer returned an error.
>
> --
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Mon, 24 Aug 2020 14:51:01 GMT) Full text and rfc822 format available.

Message #14 received at 26169 <at> debbugs.gnu.org (full text, mbox):

From: Vincent Belaïche <vincent.belaiche <at> gmail.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Vincent Belaïche <vincentb1 <at> users.sourceforge.net>,
 Kevin Ryde <user42_kevin <at> yahoo.com.au>, 26169 <at> debbugs.gnu.org
Subject: Re: bug#26169: 25.1; ses.el string cell recalculate message
Date: Mon, 24 Aug 2020 16:50:17 +0200
Or we could have some extended format string, like this:

"%?n{%.7g%}%?s{%s%}%?*{%S%}"

where whatever is between %?xxxx{ and %} is conditioned by some
predicate xxxx that can be n for numberp, s for stringp, and * for
"none of those at the same level", and some parser would compile this
format string into

(cond
   ((numberp x) (format "%.7g" x))
   ((stringp x) (format "%s" x))
   (t (format "%S" x))

Le lun. 24 août 2020 à 16:20, Vincent Belaïche
<vincent.belaiche <at> gmail.com> a écrit :
>
> Hello Lars,
>
> The root cause is that the default printer is "%.7g". This printer
> being a string it is equivalent for (lambda (x) (format xxxx x)),
> where xxxx is the concerned string, ie "%.7g".
>
> That default printer comes from the const ses-initial-file-contents,
> which hard wires the default printer to "%.7g".
>
> So you can just change your spreadsheet not to get the error by
> setting "%s" as a printer to cell A1 (just press p, then "%s", and
> then RET). You can also change the default column printer with M-p, or
> the default spreadsheet printer with C-c C-p.
>
> A better fix would certainly to accept a new printer format that
> instead of a string would be some sort of expression structure that
> would map a format string to some predicate, where the predicates
> could only be one of stringp , numberp. It could be something
>
> '(printers (stringp . "%s") (numberp . "%.7g"))
>
> So the code would check it for being safe (not to allow viruses on
> load) this way
>
> (mapc (lambda (x) (or (and (memq (car x) '(stringp numberp)) (stringp
> (cdr x)) (errror "Unsafe printer %S" x))
>    yyyy)
>
> where yyyy would be the desired value '(printers (stringp . "%s")
> (numberp . "%.7g")).
>
> Well, probably what sort of structure we want to accommodate needs
> some more thinking.
>
>   Vincent.
>
> PS : I cannot make the fix straight away, my personal PC ethernet card
> has been broken by the latest storm overvoltage, and the other PC
> having my credentials is also under repair after overheating damaged
> the connectors (well, nothing surprising as this was a MACbook pro, a
> notable unreliable sort of machine wrt to thermal extreme conditions).
>
> Le jeu. 20 août 2020 à 18:22, Lars Ingebrigtsen <larsi <at> gnus.org> a écrit :
> >
> > Kevin Ryde <user42_kevin <at> yahoo.com.au> writes:
> >
> > > In debian packaged emacs 25.1.1, starting "emacs -Q /tmp/foo.ses"
> > >
> > >    " Ret            # create a cell with a string
> > >    hello Ret        # the string content
> > >    C-p              # move point to that cell
> > >    c                # ses-recalculate-cell
> > >    =>
> > >    Format specifier doesn't match argument type: A1
> > >
> > > I expected recalc on a string cell to leave it unchanged.
> > > The message looks like a caught error, but I don't know if it's
> > > something bad or merely unsightly.  The same happens in emacs 24.
> > >
> > > Occasionally I've had c on a string cell clear it to nil.  I'll see if I
> > > can make something reproducable for that, if it could be related.
> >
> > I had a peek at ses.el (a package I don't use regularly), and something
> > like the following fixes the problem, but is probably totally the wrong
> > solution.
> >
> > I've Cc'd the maintainer on this -- Vincent?
> >
> > diff --git a/lisp/ses.el b/lisp/ses.el
> > index 96b219fc60..e396cc72ac 100644
> > --- a/lisp/ses.el
> > +++ b/lisp/ses.el
> > @@ -1231,7 +1231,9 @@ ses-print-cell
> >                      (ses--col col))
> >                  (ses-call-printer (or printer
> >                                        (ses-col-printer col)
> > -                                      ses--default-printer)
> > +                                      (if (stringp value)
> > +                                          "%7s"
> > +                                        ses--default-printer))
> >                                    value)))
> >         (if (consp ses-call-printer-return)
> >             ;; Printer returned an error.
> >
> > --
> > (domestic pets only, the antidote for overdose, milk.)
> >    bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Tue, 25 Aug 2020 20:28:02 GMT) Full text and rfc822 format available.

Message #17 received at 26169 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Vincent Belaïche <vincent.belaiche <at> gmail.com>
Cc: Vincent Belaïche <vincentb1 <at> users.sourceforge.net>,
 Kevin Ryde <user42_kevin <at> yahoo.com.au>, 26169 <at> debbugs.gnu.org
Subject: Re: bug#26169: 25.1; ses.el string cell recalculate message
Date: Tue, 25 Aug 2020 22:27:29 +0200
Vincent Belaïche <vincent.belaiche <at> gmail.com> writes:

> Or we could have some extended format string, like this:
>
> "%?n{%.7g%}%?s{%s%}%?*{%S%}"
>
> where whatever is between %?xxxx{ and %} is conditioned by some
> predicate xxxx that can be n for numberp, s for stringp, and * for
> "none of those at the same level", and some parser would compile this
> format string into
>
> (cond
>    ((numberp x) (format "%.7g" x))
>    ((stringp x) (format "%s" x))
>    (t (format "%S" x))

Hm...  or it could just be an alist like

((numberp "%.7g")
 (stringp "%s")
 (t "%S"))


-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Wed, 26 Aug 2020 11:55:02 GMT) Full text and rfc822 format available.

Message #20 received at 26169 <at> debbugs.gnu.org (full text, mbox):

From: Vincent Belaïche <vincent.belaiche <at> gmail.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Vincent Belaïche <vincentb1 <at> users.sourceforge.net>,
 Kevin Ryde <user42_kevin <at> yahoo.com.au>, 26169 <at> debbugs.gnu.org
Subject: Re: bug#26169: 25.1; ses.el string cell recalculate message
Date: Wed, 26 Aug 2020 13:54:19 +0200
After some thought the extended format string seems better to me, it
could be some separate package as that sort of need is not SES
specific, and SES would check if the package is installed or not and
use extended format strings if the package is installed.
That would be a parameter in the sheet whether is uses extended format
strings. So when you share a sheet using extended format with somebody
else that do not have a extended formats, they would receive some
warning that they need to install the package.
  V.

Le mar. 25 août 2020 à 22:27, Lars Ingebrigtsen <larsi <at> gnus.org> a écrit :
>
> Vincent Belaïche <vincent.belaiche <at> gmail.com> writes:
>
> > Or we could have some extended format string, like this:
> >
> > "%?n{%.7g%}%?s{%s%}%?*{%S%}"
> >
> > where whatever is between %?xxxx{ and %} is conditioned by some
> > predicate xxxx that can be n for numberp, s for stringp, and * for
> > "none of those at the same level", and some parser would compile this
> > format string into
> >
> > (cond
> >    ((numberp x) (format "%.7g" x))
> >    ((stringp x) (format "%s" x))
> >    (t (format "%S" x))
>
> Hm...  or it could just be an alist like
>
> ((numberp "%.7g")
>  (stringp "%s")
>  (t "%S"))
>
>
> --
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26169; Package emacs. (Thu, 27 Aug 2020 13:34:01 GMT) Full text and rfc822 format available.

Message #23 received at 26169 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Vincent Belaïche <vincent.belaiche <at> gmail.com>
Cc: Vincent Belaïche <vincentb1 <at> users.sourceforge.net>,
 Kevin Ryde <user42_kevin <at> yahoo.com.au>, 26169 <at> debbugs.gnu.org
Subject: Re: bug#26169: 25.1; ses.el string cell recalculate message
Date: Thu, 27 Aug 2020 15:33:03 +0200
Vincent Belaïche <vincent.belaiche <at> gmail.com> writes:

> After some thought the extended format string seems better to me, it
> could be some separate package as that sort of need is not SES
> specific, and SES would check if the package is installed or not and
> use extended format strings if the package is installed.
> That would be a parameter in the sheet whether is uses extended format
> strings. So when you share a sheet using extended format with somebody
> else that do not have a extended formats, they would receive some
> warning that they need to install the package.

I'm not sure I see the logic here -- it's surely a plain and simple bug
stat ses signals an error when you're "recalculating" an ascii value.
Is your concern that fixing this bug will lead to people creating more
spreadsheets with ascii values, and then other people (using older
versions of Emacs) won't be able to use those spreadsheets?

If so, I think that sounds like an unlikely occurrence.  And if it does
happen, then there's nothing new about spreadsheets changing the formats
in non-backwards-compatible manner -- the recipient will just have to
update their spreadsheet software, too.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




This bug report was last modified 4 years and 352 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.