Function: ses-define-local-printer
ses-define-local-printer is an interactive and byte-compiled function
defined in ses.el.gz.
Signature
(ses-define-local-printer NAME DEFINITION)
Documentation
Define a local printer with name NAME and definition DEFINITION.
NAME shall be a symbol. Use TAB to complete over existing local printer names.
DEFINITION shall be either a string formatter, e.g.:
"%.2f" or ("%.2f") for left alignment.
or a lambda expression, e.g. for formatting in ISO format dates
created with a (calcFunc-date YEAR MONTH DAY) formula:
(lambda (x)
(cond
((null val) "")
((eq (car-safe x) 'date)
(let ((calc-format-date '(X YYYY "-" MM "-" DD)))
(math-format-date x)))
(t (ses-center-span val ?# 'ses-prin1))))
If NAME is already used to name a local printer function, then the current definition is proposed as default value, and the function is redefined.
Probably introduced at or before Emacs version 25.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/ses.el.gz
(defun ses-define-local-printer (name definition)
"Define a local printer with name NAME and definition DEFINITION.
NAME shall be a symbol. Use TAB to complete over existing local
printer names.
DEFINITION shall be either a string formatter, e.g.:
\"%.2f\" or (\"%.2f\") for left alignment.
or a lambda expression, e.g. for formatting in ISO format dates
created with a `(calcFunc-date YEAR MONTH DAY)' formula:
(lambda (x)
(cond
((null val) \"\")
((eq (car-safe x) \\='date)
(let ((calc-format-date \\='(X YYYY \"-\" MM \"-\" DD)))
(math-format-date x)))
(t (ses-center-span val ?# \\='ses-prin1))))
If NAME is already used to name a local printer function, then
the current definition is proposed as default value, and the
function is redefined."
(interactive
(let (name def already-defined-names)
(maphash (lambda (key _val) (push (symbol-name key) already-defined-names))
ses--local-printer-hashmap)
(setq name (completing-read "Enter printer name: " already-defined-names))
(when (string= name "")
(error "Invalid printer name"))
(setq name (intern name))
(let* ((cur-printer (gethash name ses--local-printer-hashmap))
(default (and cur-printer (ses--locprn-def cur-printer))))
(setq def (ses-read-printer (format-prompt
"Enter definition of printer %S"
default name)
default)))
(list name def)))
(let* ((cur-printer (gethash name ses--local-printer-hashmap))
(default (and cur-printer (ses--locprn-def cur-printer)))
create-printer)
(cond
;; canceled operation => do nothing
((eq definition t))
;; no change => do nothing
((and cur-printer (equal definition default)))
;; re-defined printer
(cur-printer
(setq create-printer 0)
(setf (ses--locprn-def cur-printer) definition)
(ses-refresh-local-printer
name
(setf (ses--locprn-compiled cur-printer)
(ses-local-printer-compile definition))))
;; new definition
(t
(setq create-printer 1)
(puthash name
(setq cur-printer
(ses-make-local-printer-info definition))
ses--local-printer-hashmap)))
(when create-printer
(let ((printer-def-text
(concat
"(ses-local-printer "
(symbol-name name)
" "
(prin1-to-string (ses--locprn-def cur-printer))
")")))
(save-excursion
(ses-goto-data ses--numrows
(ses--locprn-number cur-printer))
(let ((inhibit-read-only t))
;; Special undo since it's outside the narrowed buffer.
(let (buffer-undo-list)
(if (= create-printer 0)
(delete-region (point) (line-end-position))
(insert ?\n)
(backward-char))
(insert printer-def-text)
(when (= create-printer 1)
(ses-file-format-extend-parameter-list 3)
(ses-set-parameter 'ses--numlocprn
(1+ ses--numlocprn))))))))))