Update of /project/climacs/cvsroot/climacs In directory common-lisp.net:/tmp/cvs-serv26651
Modified Files: gui.lisp syntax.lisp Log Message: Patch to get incremental redisplay to work. There is still a small problem with the cursor disappearing.
Thanks to Alastair Bridgewater.
Date: Mon Dec 27 17:47:46 2004 Author: rstrandh
Index: climacs/gui.lisp diff -u climacs/gui.lisp:1.20 climacs/gui.lisp:1.21 --- climacs/gui.lisp:1.20 Mon Dec 27 12:32:46 2004 +++ climacs/gui.lisp Mon Dec 27 17:47:45 2004 @@ -48,7 +48,7 @@ (win (make-pane 'climacs-pane :width 900 :height 400 :name 'win -;;; :incremental-redisplay t + :incremental-redisplay t :display-function 'display-win)) (int :interactor :width 900 :height 50 :max-height 50)) (:layouts
Index: climacs/syntax.lisp diff -u climacs/syntax.lisp:1.8 climacs/syntax.lisp:1.9 --- climacs/syntax.lisp:1.8 Mon Dec 27 12:32:46 2004 +++ climacs/syntax.lisp Mon Dec 27 17:47:45 2004 @@ -66,11 +66,11 @@ 'string) :stream pane)))
-(defmacro maybe-updating-output (stuff &body body) - `(progn ,@body)) +;;(defmacro maybe-updating-output (stuff &body body) +;; `(progn ,@body))
-;; (defmacro maybe-updating-output (stuff &body body) -;; `(updating-output ,stuff ,@body)) + (defmacro maybe-updating-output (stuff &body body) + `(updating-output ,stuff ,@body))
(defmethod display-line (pane (syntax basic-syntax)) (with-slots (saved-offset bot scan cursor-x cursor-y space-width tab-width) syntax @@ -81,12 +81,18 @@ (macrolet ((output-word (&body body) `(let ((contents (compute-contents))) (if (null contents) - (progn ,@body) + ,(if body + `(maybe-updating-output (pane :unique-id (incf id)) + ,@body) + `(progn)) + (progn (maybe-updating-output (pane :unique-id (incf id) :cache-value contents :cache-test #'string=) - (present-contents contents pane syntax) - ,@body))))) + (present-contents contents pane syntax)) + ,(when body + `(maybe-updating-output (pane :unique-id (incf id)) + ,@body))))))) (loop with id = 0 when (mark= scan (point pane)) do (multiple-value-bind (x y) (stream-cursor-position pane)