anchor.diff:                                    fill-width
                                     break-characters
                                     after-line-break
  +                                  (after-line-break-composed t)
                                     (after-line-break-initially nil)
                                     (after-line-break-subsequent t))
                             &body body)
     (declare (ignore fill-width break-characters))
     (setq stream (stream-designator-symbol stream '*standard-output*))
     (with-keywords-removed (args (:after-line-break
  +                                :after-line-break-composed
                                   :after-line-break-initially
                                   :after-line-break-subsequent))
  -   (with-gensyms (continuation fresh-line-fn)
  -     (alexandria:once-only (after-line-break
  -                            after-line-break-initially
  -                            after-line-break-subsequent)
  -       `(flet ((,continuation (,stream)
  -                 ,@body)
  -               (,fresh-line-fn (,stream soft-newline-p &aux (gs (graphics-state stream)))
  -                 (when (or (and ,after-line-break-initially (null soft-newline-p))
  -                           (and ,after-line-break-subsequent soft-newline-p))
  -                   (with-end-of-line-action (stream :allow) ; prevent infinite recursion
  -                     (with-drawing-options (stream :text-style (graphics-state-text-style gs)
  -                                                   :ink (graphics-state-ink gs))
  -                       (etypecase ,after-line-break
  -                         (string   (write-string ,after-line-break ,stream))
  -                         (function (funcall ,after-line-break ,stream soft-newline-p))
  -                         (null nil)))))))
  -          (declare (dynamic-extent #',continuation #',fresh-line-fn))
  -          (invoke-with-filling-output ,stream #',continuation #',fresh-line-fn ,@args))))))
  +    (with-gensyms (continuation old-fresh-line-fn fresh-line-fn
  +                                initial-indent ink text-style)
  +      (alexandria:once-only (after-line-break
  +                             after-line-break-composed
  +                             after-line-break-initially
  +                             after-line-break-subsequent)
  +        `(let ((,initial-indent (stream-cursor-initial-position ,stream))
  +               (,old-fresh-line-fn (after-line-break ,stream))
  +               (,ink (medium-ink ,stream))
  +               (,text-style (medium-text-style ,stream)))
  +           (flet ((,continuation (,stream)
  +                    ,@body)
  +                  (,fresh-line-fn (,stream soft-newline-p)
  +                    (when (and ,after-line-break-composed ,old-fresh-line-fn)
  +                      (funcall ,old-fresh-line-fn ,stream soft-newline-p))
  +                    (when (null ,after-line-break)
  +                      (return-from ,fresh-line-fn))
  +                    (multiple-value-bind (cx cy) (stream-cursor-position ,stream)
  +                      (setf (stream-cursor-position ,stream) (values ,initial-indent cy))
  +                      (when (or (and ,after-line-break-initially (null soft-newline-p))
  +                                (and ,after-line-break-subsequent soft-newline-p))
  +                        (with-end-of-line-action (,stream :allow) ; prevent infinite recursion
  +                          (with-drawing-options (,stream :ink ,ink :text-style ,text-style)
  +                            (etypecase ,after-line-break
  +                              (string   (write-string ,after-line-break ,stream))
  +                              (function (funcall ,after-line-break ,stream soft-newline-p))))))
  +                      ;; When after-line-break goes beyond the previous
  +                      ;; position we advance the cursor.
  +                      (maxf cx (stream-cursor-position ,stream))
  +                      (setf (stream-cursor-position ,stream) (values cx cy)))))
  +             (declare (dynamic-extent #',continuation #',fresh-line-fn))
  +             (invoke-with-filling-output ,stream #',continuation #',fresh-line-fn ,@args)))))))
   
   (defgeneric invoke-with-indenting-output
       (stream continuation &key indent move-cursor)
  
positive.code:     (with-temporary-margins (stream :right `(:absolute ,fill-width))
        (letf (((stream-end-of-line-action stream) :wrap*)
               ((line-break-strategy stream) break-characters)
               ((after-line-break stream) fresh-line-fn)
               ((graphics-state-ink (graphics-state stream)) (medium-ink stream))
               ((graphics-state-text-style (graphics-state stream)) (medium-text-style stream)))
          (when (stream-start-line-p stream)
            (funcall fresh-line-fn stream nil))
          (funcall continuation stream)))))
  
negative.code: 
  ;;; Mixin is used to store text-style and ink when filling-output it is invoked.
  
  (defclass filling-output-mixin (gs-ink-mixin gs-text-style-mixin)
    ((lbs :accessor line-break-strategy :initarg :line-break-strategy
          :documentation "T for a default word wrap or a list of break characters.")
     (alb :accessor after-line-break :initarg :after-line-break
          :documentation "Function accepting stream to call after the line break."))
    (:default-initargs :line-break-strategy t :after-line-break nil))
  
  (defgeneric invoke-with-filling-output (stream continuation fresh-line-fn
                                          &key fill-width break-characters)
  