In SCREEN-MOVE-CURSOR, forget current position of cursor in order to
authorChris Hanson <org/chris-hanson/cph>
Wed, 15 May 1996 00:04:34 +0000 (00:04 +0000)
committerChris Hanson <org/chris-hanson/cph>
Wed, 15 May 1996 00:04:34 +0000 (00:04 +0000)
force it to be moved at the end of the update.  This works around bugs
in the terminal implementations: sometimes the cursor is moved as a
side-effect of some other operation.  It's easier to fix this here
than to modify each implementation to guarantee that the cursor is not
moved.

v7/src/edwin/screen.scm

index 1f3d20dec14be027cf2c2d2256f199924f9bcac5..6c9d42130cc9521a94b83baf5e2351ec1942b159 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Id: screen.scm,v 1.111 1996/05/14 23:46:07 cph Exp $
+;;;    $Id: screen.scm,v 1.112 1996/05/15 00:04:34 cph Exp $
 ;;;
 ;;;    Copyright (c) 1989-96 Massachusetts Institute of Technology
 ;;;
       ((screen-debug-trace screen) 'screen screen 'move-cursor x y))
   (let ((new-matrix (screen-new-matrix screen)))
     (set-matrix-cursor-x! new-matrix x)
-    (set-matrix-cursor-y! new-matrix y)))
+    (set-matrix-cursor-y! new-matrix y))
+  ;; Kludge: forget current position of cursor in order to force it to
+  ;; move.  Works around side-effects in terminal that move cursor.
+  (let ((current-matrix (screen-current-matrix screen)))
+    (set-matrix-cursor-x! current-matrix #f)
+    (set-matrix-cursor-y! current-matrix #f)))
 
 (define (screen-direct-output-move-cursor screen x y)
   (if (screen-debug-trace screen)