CLIM mail archive


Incremental Redisplay question

   Date: Wed, 20 Jul 94 15:18:42 PDT
   From: Larry Baum <>

   Is this the right email address for posting to the CLIM news group?

   If not, what is?

   If so, here's my question.

   In thinking about Robert Pfeiffer's redisplay problem, I tried the following 

   (defun test (stream)
     (let* ((i 0)
	    (record (updating-output (stream)
		      (loop for j from 0 to 4
			(updating-output (stream :unique-id j 
					  :cache-value (+ (* 5 i) j)
					  :cache-test #'my-cache-test)
			  (format stream "Element ~d~%" 
				  (+ (* 5 i) j)))))))
       (force-output stream)
       (loop for k from 1 to 50 do
	 (catch 'weird     
	   (incf i)
	   (redisplay record stream)))))

   (defun my-cache-test (x y)
     (if (zerop (random 4))
	 (throw 'weird nil)  ;;; skip the rest of the incremental redisplay
	 (= x y)))

   The idea is to see if I can easily respond to an asynchronous
   event (simulated here by the call to random) by terminating the current
   redisplay using catch & throw, dealing with the event, and then
   trying the redisplay again.

   When I try this on a MacIvory, with CLIM 2.0 Beta, I end up in the
   debugger with a NIL output record problem.

   What am I doing wrong?

THROWing out of REDISPLAY is almost certainly the culprit.  You are
probably trashing the output record structures.


Main Index | Thread Index