Observe the following presentation definitions:
(define-presentation-type unacceptable ())
(define-presentation-method accept ((type unacceptable) stream view &key) (with-delimiter-gestures (#\Space) (list (accept 'package :stream stream :view view :prompt nil) (accept 'package :stream stream :view view :prompt nil))))
(defun test-unacceptable (&optional (stream *standard-input*)) (with-input-editing (stream) (replace-input stream (format nil "CLIM-USER CL-USER~%") :buffer-start 0) (accept 'unacceptable :stream stream)))
When (test-unacceptable) is run, I'd expect a return value of (#.(find-package :clim-user) #.(find-package :cl-user)). In Drei, this won't work, because the call to `replace-input' in `complete-input' will trigger a rescan, and since the delimiter gesture is left unread once "CLIM-USER" has been read, it will prevent the proper parsing of the second element of input (to be specific, it will see it as empty). Goatee gets around this by introducing a nonspecified hack in `replace-input' whereby passing :rescan nil explicitly causes the function to not queue a rescan, even if it is necessary. (This example doesn't work in Goatee anyway, though, but I guess that's for another reason).
My question is this: do you think the above code should work and do as I think, and how exactly are delimiter gestures supposed to be handled?