Here's a "patch", but fixing the sources is better, Richard Billington
---------------------------8< snip >8---------------------------
(in-package :clim-internals)
;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; patch for recording.lisp - need to redefine define-invoke-with, and then recompile two calls to it. ;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro define-invoke-with (macro-name func-name record-type doc-string) `(defmacro ,macro-name ((stream &optional (record-type '',record-type) (record (gensym)) &rest initargs) &body body) ,doc-string (setq stream (stream-designator-symbol stream '*standard-output*)) (with-gensyms (constructor continuation) (multiple-value-bind (bindings m-i-args) (rebind-arguments initargs) `(let ,bindings (flet ((,constructor () (make-instance ,record-type ,@m-i-args)) (,continuation (,stream ,record) ,(declare-ignorable-form* stream record) ,@body)) #+BUGGY (declare (dynamic-extent #'constructor #'continuation)) #-BUGGY (declare (dynamic-extent #',constructor #',continuation)) (,',func-name ,stream #',continuation ,record-type #',constructor ,@m-i-args)))))))
(define-invoke-with with-new-output-record invoke-with-new-output-record standard-sequence-output-record "Creates a new output record of type RECORD-TYPE and then captures the output of BODY into the new output record, and inserts the new record into the current "open" output record assotiated with STREAM. If RECORD is supplied, it is the name of a variable that will be lexically bound to the new output record inside the body. INITARGS are CLOS initargs that are passed to MAKE-INSTANCE when the new output record is created. It returns the created output record. The STREAM argument is a symbol that is bound to an output recording stream. If it is T, *STANDARD-OUTPUT* is used.")
(define-invoke-with with-output-to-output-record invoke-with-output-to-output-record standard-sequence-output-record "Creates a new output record of type RECORD-TYPE and then captures the output of BODY into the new output record. The cursor position of STREAM is initially bound to (0,0) If RECORD is supplied, it is the name of a variable that will be lexically bound to the new output record inside the body. INITARGS are CLOS initargs that are passed to MAKE-INSTANCE when the new output record is created. It returns the created output record. The STREAM argument is a symbol that is bound to an output recording stream. If it is T, *STANDARD-OUTPUT* is used.")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; patch for presentations.lisp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defmacro with-output-as-presentation ((stream object type &rest key-args &key modifier single-box (allow-sensitive-inferiors t) parent (record-type ''standard-presentation) &allow-other-keys) &body body) (declare (ignore parent single-box modifier)) (setq stream (stream-designator-symbol stream '*standard-output*)) (multiple-value-bind (decls with-body) (get-body-declarations body) (with-gensyms (record-arg continuation) (with-keywords-removed (key-args (:record-type :allow-sensitive-inferiors)) `(flet ((,continuation () ,@decls ,@with-body)) #+BUGGY (declare (dynamic-extent #'continuation)) #-BUGGY (declare (dynamic-extent #',continuation)) (if (and (output-recording-stream-p ,stream) *allow-sensitive-inferiors*) (with-new-output-record (,stream ,record-type ,record-arg :object ,object :type (expand-presentation-type-abbreviation ,type) ,@key-args) (let ((*allow-sensitive-inferiors* ,allow-sensitive-inferiors)) (,continuation))) (,continuation)))))))