From 209e30bac2d73c2e6f1c46b0d7281b474527cfa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Bela=C3=AFche?= Date: Wed, 30 Dec 2015 12:37:54 +0100 Subject: [PATCH] Don't fake empty cells value by "" when printing with a lambda. When using a lambda expression printer function the user should be free to format differently a really empty cell, ie. containing nil, from a cell containing an empty string "". * ses.el (ses-call-printer): Replace `(or value "")' by just `value' in the case of a lambda expression printer function. * ses.texi (Printer functions): Add example and description about lambda expression printer function handling all the possible values, including unexpected ones. --- doc/misc/ses.texi | 30 ++++++++++++++++++++++++++++++ lisp/ses.el | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi index 2f92e3ea836..4cb4188f690 100644 --- a/doc/misc/ses.texi +++ b/doc/misc/ses.texi @@ -443,6 +443,36 @@ printer function. Then, if you call again @code{"%.3f"} all the cells using printer @samp{foo} will be reprinted accordingly. +When you define a printer function with a lambda expression taking one +argument, please take care that the returned value is a string, or a +list containing a string, even when the input argument has an +unexpected value. Here is an example: + +@example +(lambda (val) + (cond + ((null val) "") + ((and (numberp val) (>= val 0)) (format "%.1f" val)) + (t (ses-center-span (format "%S" val) ?#)))) +@end example + +This example will: +@itemize +@item +When the cell is empty (ie.@: when @code{val} is @code{nil}), print an +empty string @code{""} +@item +When the cell value is a non negative number, format the the value in +fixed-point notation with one decimal after point +@item +Otherwise, handle the value as erroneous by printing it as an +s-expression (using @code{prin1}), centered and surrounded by @code{#} +filling. +@end itemize + + + + @node Clearing cells @section Clearing cells @cindex clearing commands diff --git a/lisp/ses.el b/lisp/ses.el index 7347eb8f5fd..8cbc2e80cde 100644 --- a/lisp/ses.el +++ b/lisp/ses.el @@ -1289,7 +1289,7 @@ printer signaled one (and \"%s\" is used as the default printer), else nil." (and locprn (ses--locprn-compiled locprn)))) printer) - (or value ""))) + value)) (if (stringp value) value (or (stringp (car-safe value))