summaryrefslogtreecommitdiff
path: root/jterm.hs
diff options
context:
space:
mode:
Diffstat (limited to 'jterm.hs')
-rw-r--r--jterm.hs17
1 files 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