(I've messed up with git send-email, the patch with this email is at http://lists.gnu.org/archive/html/guile-devel/2017-02/msg00008.html).
Some objects have large printed representations and trying to print them can kill the terminal. This is a serious problem when handling e.g. big arrays. For repl values there's (repl-default-option-set! 'print (lambda (val) ...)) which lets you override the default printing routine. But for exceptions there's no equivalent. The default exception printers are in (ice-9 boot-9) and are difficult to override. Besides, the format of the exception output is often chosen by arguments to scm-error and not by those printers. The patch to master (ice-9 boot-9) lets you override the (format) used internally by the exception printers. Then I rewrite the format string in user code, see below. It's a bit hacky, maybe someone has a better solution. See also the other patch I've posted to the list to support arrays in (truncated-print). The patches are independent, but they make each other useful so to speak. Regards Daniel (In the code below for .guile, replace [AT] by the at symbol). ; Truncate output on exceptions. Requires exception-format in ice-9/boot.scm. ; FIXME doesn't handle e.g. "x~~~s" -> "x~~~[AT]y" (define (rewrite-fmt fmt) (let loop ((f "") (b 0)) (let ((next (string-contains-ci fmt "~s" b))) (if next (loop (if (or (zero? next) (not (char=? #\~ (string-ref fmt (- next 1))))) (string-append f (substring fmt 0 next) "~[AT]y") fmt) (+ b next 2)) (string-append f (substring fmt b)))))) (when (defined? 'exception-format) (set! exception-format (lambda (port fmt . args) (apply format port (rewrite-fmt fmt) args))))