CLIM mail archive


Use of CLIM:EXPRESSION in interactor commands

   Date: Fri, 25 Feb 94 13:24:37 CST

   CLIM 2.0-beta on LispWorks-3.2.21-beta-4
   CLIM 2.0 on Allegro 4.2

   How can I correctly include arguments of type CLIM:EXPRESSION within
   an interactor command, such as the one below?

   (define-clim-expr-command (clim-expr::make-cons :name t :menu t)
       ((car 'clim:expression)
	(cdr 'clim:expression))
     (format t "~&~s~&" (cons car cdr)))

   The above command works fine if I enter arguments that have no
   embedded #\Space; but if I try to enter (A B), I get an error because
   the CLIM command processor interprets the #\Space as an argument
   delimiter and is unable to read a complete Lisp expression from "(A".
   On the other hand, if I use :AUTO-ACTIVATE T, at least one
   implementation correctly reads a list or string (i.e., a Lisp object
   whose printed representation has a specific delimiter) as an argument,
   but then no longer correctly handles a #\Space meant to delimit a
   number or symbol.  Instead, I have to use #\Tab, which correctly
   delimits the argument but looks funny.

   Perhaps the CLIM:ACCEPT method for CLIM:EXPRESSION ought to turn off
   the argument-delimiting behavior of #\Space during collection of
   obviously incomplete input.  When its input is apparently complete,
   the value of :AUTO-ACTIVATE would then determine whether to wait for
   an explicit delimiter or simply return the value found.

The definitions of "obviously incomplete" and "apparently complete"
are very hard to implement.  That is why the EXPRESSION type is so
hard to get right.  This was broken in Dynamic Windows, too; it's no
surprise that CLIM doesn't work right.

I'll buy the drinks for the person who can get EXPRESSION right.


Main Index | Thread Index