>From 2251a259058524fbe631fd287c95b43882227f79 Mon Sep 17 00:00:00 2001 From: Daniel Hartwig Date: Tue, 4 Dec 2012 11:41:35 +0800 Subject: [PATCH] repl: add repl-option for customized print * module/system/repl/common.scm (repl-default-options) (repl-print): Add option to use customized print procedure. * doc/ref/scheme-using.texi (REPL Commands): Update. --- doc/ref/scheme-using.texi | 4 ++++ module/system/repl/common.scm | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/doc/ref/scheme-using.texi b/doc/ref/scheme-using.texi index 7eb84de..4f9e6db 100644 --- a/doc/ref/scheme-using.texi +++ b/doc/ref/scheme-using.texi @@ -445,6 +445,10 @@ choice is available. Off by default (indicating compilation). @item prompt A customized REPL prompt. @code{#f} by default, indicating the default prompt. address@hidden print +A procedure of two arguments used to print the result of evaluating each +expression. The arguments are the current REPL and the value to print. +By default, @code{#f}, to use the default procedure. @item value-history Whether value history is on or not. @xref{Value History}. @item on-error diff --git a/module/system/repl/common.scm b/module/system/repl/common.scm index 346ba99..3f3e785 100644 --- a/module/system/repl/common.scm +++ b/module/system/repl/common.scm @@ -119,6 +119,11 @@ See , for more details.") ((thunk? prompt) (lambda (repl) (prompt))) ((procedure? prompt) prompt) (else (error "Invalid prompt" prompt))))) + (print #f ,(lambda (print) + (cond + ((not print) #f) + ((procedure? print) print) + (else (error "Invalid print procedure" print))))) (value-history ,(value-history-enabled?) ,(lambda (x) @@ -209,12 +214,16 @@ See , for more details.") (if (not (eq? val *unspecified*)) (begin (run-hook before-print-hook val) - ;; The result of an evaluation is representable in scheme, and - ;; should be printed with the generic printer, `write'. The - ;; language-printer is something else: it prints expressions of - ;; a given language, not the result of evaluation. - (write val) - (newline)))) + (cond + ((repl-option-ref repl 'print) + => (lambda (print) (print repl val))) + (else + ;; The result of an evaluation is representable in scheme, and + ;; should be printed with the generic printer, `write'. The + ;; language-printer is something else: it prints expressions of + ;; a given language, not the result of evaluation. + (write val) + (newline)))))) (define (repl-option-ref repl key) (cadr (or (assq key (repl-options repl)) -- 1.7.10.4