From bdb79bf5e014fa033c7f13429a7a0f42df100b0b Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Sat, 30 Nov 2024 22:34:35 +1100 Subject: don't redraw when cursor offscreen --- jterm.hs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/jterm.hs b/jterm.hs index 7790942..1fe3c7e 100644 --- a/jterm.hs +++ b/jterm.hs @@ -310,8 +310,11 @@ waitEvent display event = do handleEvent :: Display -> Drawable -> XftColor -> XftColor -> XftColor -> XftColor -> XftFont -> HandledEvent -> StateT Buffer IO () handleEvent display win bgcolour fgcolour linecolour selcolour font event = do b <- get + (_, _, _, _, m, _, _) <- lift $ getGeometry display win let (start, end) = cursor b selstr = R.splitAt end (content b) & fst & R.splitAt start & snd + (height, _) = fontSize display font + pageheight = fromIntegral m `div` fromIntegral height case event of Key (_, _, time, x, y, _, _, mod, keycode, _) -> do keysym <- lift $ keycodeToKeysym display keycode 0 @@ -330,9 +333,6 @@ handleEvent display win bgcolour fgcolour linecolour selcolour font event = do -- right click down case search selstr (content b) (1 + end) of Just p -> do - (_, _, _, _, m, _, _) <- lift $ getGeometry display win - let (height, _) = fontSize display font - pageheight = fromIntegral m `div` fromIntegral height put $ b {cursor = (p, p + end - start), pos = max (pos b) $ R.lengthInLines (R.splitAt p (content b) & fst) + 1 -. pageheight} Nothing -> pure () (0, 2) -> @@ -403,14 +403,8 @@ handleEvent display win bgcolour fgcolour linecolour selcolour font event = do (_, 65362) -> scrollup 1 (_, 65364) -> scrolldown 1 (_, 65365) -> do - (_, _, _, _, m, _, _) <- lift $ getGeometry display win - let (height, _) = fontSize display font - pageheight = fromIntegral m `div` fromIntegral height scrollup ((681 * pageheight) `div` 1000) (_, 65366) -> do - (_, _, _, _, m, _, _) <- lift $ getGeometry display win - let (height, _) = fontSize display font - pageheight = fromIntegral m `div` fromIntegral height scrolldown ((681 * pageheight) `div` 1000) (_, 65288) -> do -- backspace @@ -422,8 +416,11 @@ handleEvent display win bgcolour fgcolour linecolour selcolour font event = do T toAppend -> do let noesc = stripAnsiEscapeCodes toAppend expandedTabs = T.intercalate "\n" $ map expandTabs $ T.splitOn "\n" noesc + pl = pos b & linePos + cl = ptycursor b & linePos + linePos p = content b & R.splitAt p & fst & R.lengthAsPosition & posLine delins' True (ptycursor b) (ptycursor b) $ R.fromText expandedTabs - redraw + when (pl + pageheight > cl) redraw Notify -> do prop <- lift $ internAtom display "JTERM_CLIPBOARD" False lift (getWindowProperty8 display prop win) >>= \case -- cgit v1.2.3