diff options
author | Daniel Hartwig <mandyke@gmail.com> | 2012-12-04 11:41:35 +0800 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2012-12-10 23:41:06 +0100 |
commit | afdf5467e5d8f9b1c13cae2d2cc0679a710d2403 (patch) | |
tree | d4e8507359174a5ff22231550e6bbe32a135a2d2 | |
parent | 9977b316434c6ac59e0224fd530ab8065f2cc938 (diff) | |
download | guile-afdf5467e5d8f9b1c13cae2d2cc0679a710d2403.tar.gz |
repl: add repl-option for customized print
Closes <http://bugs.gnu.org/13077>.
* 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.
-rw-r--r-- | doc/ref/scheme-using.texi | 4 | ||||
-rw-r--r-- | 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 7eb84de0a..4f9e6db82 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. +@item 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 346ba990f..3f3e7854a 100644 --- a/module/system/repl/common.scm +++ b/module/system/repl/common.scm @@ -119,6 +119,11 @@ See <http://www.gnu.org/licenses/lgpl.html>, 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 <http://www.gnu.org/licenses/lgpl.html>, 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)) |