diff --git a/pkgs/racket-doc/scribblings/reference/write.scrbl b/pkgs/racket-doc/scribblings/reference/write.scrbl index fc1ea1b67d..45a612fc46 100644 --- a/pkgs/racket-doc/scribblings/reference/write.scrbl +++ b/pkgs/racket-doc/scribblings/reference/write.scrbl @@ -272,6 +272,16 @@ A @tech{parameter} that controls printing of @tech{syntax objects}. Up to object within @litchar{#} (after the @tech{syntax object}'s source location, if any).} +@defparam[print-value-columns columns (or/c +inf.0 (and/c exact-integer? (>/c 5)))]{ + +A @tech{parameter} that contains a recommendation for the number of +columns that should be used for printing values via @racket[print]. +May or may not be respected by @racket[print] - the current default +handler for @racket[print] does not. It is expected that REPLs that use +some form of pretty-printing for values respect this parameter. + +@history[#:added "8.0.0.13"] +} @defparam*[current-write-relative-directory path (or/c (and/c path-string? complete-path?) diff --git a/pkgs/racket-test/tests/racket/print-value-columns.rkt b/pkgs/racket-test/tests/racket/print-value-columns.rkt new file mode 100644 index 0000000000..dc8aa821c2 --- /dev/null +++ b/pkgs/racket-test/tests/racket/print-value-columns.rkt @@ -0,0 +1,11 @@ +#lang racket/base +(require rackunit) + +(check-equal? (parameterize ((print-value-columns 10)) + (print-value-columns)) + 10) +(check-equal? (parameterize ((print-value-columns +inf.0)) + (print-value-columns)) + +inf.0) +(check-exn exn:fail? (lambda () (print-value-columns -5))) +(check-exn exn:fail? (lambda () (print-value-columns 'wrong))) diff --git a/racket/collects/racket/private/base.rkt b/racket/collects/racket/private/base.rkt index f9d23f853b..788f7e54bf 100644 --- a/racket/collects/racket/private/base.rkt +++ b/racket/collects/racket/private/base.rkt @@ -12,6 +12,7 @@ "cert.rkt" "submodule.rkt" "generic-interfaces.rkt" + "print-value-columns.rkt" "kw-syntax-binding.rkt" ; shadows `syntax-binding-set-extend` "kw-syntax-serialize.rkt" ; shadows `syntax-serialize` and `syntax-deserialize (for-syntax "stxcase-scheme.rkt")) @@ -40,6 +41,7 @@ (all-from "cert.rkt") (all-from "submodule.rkt") (all-from "generic-interfaces.rkt") + (all-from "print-value-columns.rkt") (all-from "kw-syntax-binding.rkt") (all-from "kw-syntax-serialize.rkt") (for-syntax syntax-rules syntax-id-rules ... _) diff --git a/racket/collects/racket/private/print-value-columns.rkt b/racket/collects/racket/private/print-value-columns.rkt new file mode 100644 index 0000000000..500be2ba2f --- /dev/null +++ b/racket/collects/racket/private/print-value-columns.rkt @@ -0,0 +1,14 @@ +(module print-value-columns "pre-base.rkt" + (#%provide print-value-columns) + + (define print-value-columns + (make-parameter +inf.0 + (lambda (c) + (if (or (eqv? c +inf.0) + (and (exact-integer? c) + ; somewhat arbitrary value, enough for "(list" + (> c 5))) + c + (raise-argument-error 'print-value-columns "(or/c +inf.0 (and/c exact-integer? (>/c 5)))" c))) + 'print-value-columns))) +