]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle nil cell value in compiled printer functions.
authorVincent Belaïche <vincentb1@users.sourceforge.net>
Wed, 10 Aug 2016 08:13:27 +0000 (10:13 +0200)
committerVincent Belaïche <vincentb1@users.sourceforge.net>
Wed, 10 Aug 2016 08:13:27 +0000 (10:13 +0200)
* doc/misc/ses.texi (Quick Tutorial): Minor clarification about the
ses-range `!' modifier.
(More on cell printing): Fix this that the fallback printer is
`ses-prin1', not "%S".  That makes a difference for any cell value for
which "%S" would insert a backslash characters.

* lisp/ses.el (ses-local-printer-compile): Handle the nil cell value
--- contrary to emacs-25 branches ses-call-printer does not handle
prior to calling a function printer.  Not doing this would still work
because the compiled function would throw and error and SES would in
the end resort to the ses-prin1 fallback, however this way would not
be in line with the raison d'être of compiling printer which is speed.

doc/misc/ses.texi
lisp/ses.el

index c43ddf472a4677e9d90cda2a1532f5a5b2d8ad20..1f951de239f725d17eadc080f2431e59546c919a 100644 (file)
@@ -188,8 +188,8 @@ the end-points, e.g.:
 @emph{list} of values.  This allows for more complex possibilities.)
 
 Alternatively you can use the @code{!} modifier of @code{ses-range} to
-remove blank cells which allows to use @code{+} instead of
-@code{ses+}:
+remove blank cells from the returned list, which allows to use
+@code{+} instead of @code{ses+}:
 
 @lisp
 (apply '+ (ses-range A2 A5 !))
@@ -1020,7 +1020,8 @@ this to undo the effect of @kbd{t}.
 @end table
 
 When a printer function signals an error, the fallback printer
-@samp{"%S"} is substituted.  This is useful when your column printer
+@findex ses-prin1
+@code{ses-prin1} is substituted.  This is useful when your column printer
 is numeric-only and you use a string as a cell value.  Note that the
 standard default printer is @samp{"%.7g"} which is numeric-only, so cells
 that are empty of contain strings will use the fallback printer.
index 9abbd6dd2ca3600c3d398cc41ff50525ec8a51e5..c80415e1e154515bd0ac14cab6fe5f1d2832a128 100644 (file)
@@ -565,11 +565,14 @@ definition."
   (cond
    ((functionp printer) printer)
    ((stringp printer)
-    `(lambda (x) (format ,printer x)))
+    `(lambda (x)
+       (if (null x) ""
+         (format ,printer x))))
    ((stringp (car-safe printer))
     `(lambda (x)
-       (setq ses-call-printer-return t)
-       (format ,(car printer) x)))
+       (if (null x) ""
+         (setq ses-call-printer-return t)
+         (format ,(car printer) x))))
    (t (error "Invalid printer %S" printer))))
 
 (defun ses--local-printer (name def)