CLIM mail archive

[Prev][Next][Index][Thread]

Re: accept expressions and eof




  Date: Wed, 3 Nov 93 10:40:20 -0800
  From: Carolyn Banda <banda@marlin.arc.nasa.gov>

  (CLIM 1.1, ACL 4.1 on SGI)

  I'm modifying an existing expression using:

      (clim:accept 'expression :stream stream :default default
		    :prompt "Modify expression "
		    :display-default nil
		    :insert-default t)

  - with stream and default bound to appropriate values.

  This works fine most of the time.  However, if I don't type in enough right
  parentheses before hitting return, it breaks with:

  Error: eof encountered on stream #<EXCL::STRING-INPUT-STREAM @ #x11eef38a>
    [condition type: END-OF-FILE]


  My question:  Is there a way to trap this error so that I can prompt the
  user to correct the input by adding more right parens?

This has been recently fixed in Allegro CLIM 2. I've converted part of the
fix for CLIM 1.1 - this code hasn't been tested so the usual caveats apply

Hope this helps

-----
Colin Meldrum, Franz Inc.	1995 University Avenue, Suite 275         
colin@Franz.COM (internet)	Berkeley, CA 94704                       
uunet!franz!colin (uucp)	Phone: (510) 548-3600; FAX: (510) 548-8253


--------------------------------------------------------
(in-package :clim)

(define-presentation-method accept ((type expression) stream (view textual-view) &key)
  (let ((*read-recursive-objects* nil))
    (with-temporary-string (string)
      (read-recursive stream string nil)
      (when (interactive-stream-p stream)
	(rescan-for-activation stream))
      (multiple-value-bind (expression index)
	  (handler-case
	      (read-from-string string)
	    (error ()
	      (simple-parse-error "The input ~S is not a complete Lisp expression."
				  (evacuate-temporary-string string))))
	;; Too bad READ-FROM-STRING doesn't take a :JUNK-ALLOWED argument.
	;; Simulate what it would do
	(unless (>= index (length string))
	  (when (find-if-not #'whitespace-char-p string :start index)
	    (simple-parse-error "Extra junk ~S found after the expression."
				(subseq string index))))
	expression))))

References:

Main Index | Thread Index