[mcclim-devel] Delimiter gestures and the bowels of input editing

Troels Henriksen athas at sigkill.dk
Tue Jan 30 14:34:18 UTC 2007


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?

-- 
\  Troels "Athas"
/\ Henriksen



More information about the mcclim-devel mailing list