Repository : ssh://darcs.haskell.org//srv/darcs/packages/haskeline On branch : master
http://hackage.haskell.org/trac/ghc/changeset/655912e609efa8db3d01e61557b7f561475ed8dc >--------------------------------------------------------------- commit 655912e609efa8db3d01e61557b7f561475ed8dc Author: Judah Jacobson <[email protected]> Date: Sat Apr 28 20:26:58 2012 +0000 Fix bug in Windows line redrawing. >--------------------------------------------------------------- System/Console/Haskeline/Backend/Win32.hsc | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/System/Console/Haskeline/Backend/Win32.hsc b/System/Console/Haskeline/Backend/Win32.hsc index e3663c8..4f6ae98 100644 --- a/System/Console/Haskeline/Backend/Win32.hsc +++ b/System/Console/Haskeline/Backend/Win32.hsc @@ -264,11 +264,15 @@ printText txt = do h <- asks hOut liftIO (writeConsole h txt) -printAfter :: String -> DrawM () -printAfter str = do - p <- getPos - printText str - setPos p +printAfter :: [Grapheme] -> DrawM () +printAfter gs = do + -- NOTE: you may be tempted to write + -- do {p <- getPos; printText (...); setPos p} + -- Unfortunately, that would be WRONG, because if printText wraps + -- a line at the bottom of the window, causing the window to scroll, + -- then the old value of p will be incorrect. + printText (graphemesToString gs) + movePosLeft gs drawLineDiffWin :: LineChars -> LineChars -> DrawM () drawLineDiffWin (xs1,ys1) (xs2,ys2) = case matchInit xs1 xs2 of @@ -278,9 +282,9 @@ drawLineDiffWin (xs1,ys1) (xs2,ys2) = case matchInit xs1 xs2 of (xs1',xs2') -> do movePosLeft xs1' let m = gsWidth xs1' + gsWidth ys1 - (gsWidth xs2' + gsWidth ys2) - let deadText = replicate m ' ' + let deadText = stringToGraphemes $ replicate m ' ' printText (graphemesToString xs2') - printAfter (graphemesToString ys2 ++ deadText) + printAfter (ys2 ++ deadText) movePosRight, movePosLeft :: [Grapheme] -> DrawM () movePosRight str = do _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
