diff options
| author | Justin Bedo <cu@cua0.org> | 2025-09-19 11:14:07 +1000 |
|---|---|---|
| committer | Justin Bedo <cu@cua0.org> | 2025-09-19 12:50:00 +1000 |
| commit | 95919d486a475eb490387bf858c0cf1918629028 (patch) | |
| tree | bc42a35178d0b6573b612142d588796a10ae3125 | |
| parent | ef0301f1feddc591d9307e07a867e099b2e4272e (diff) | |
fix clipboard
| -rw-r--r-- | jterm.hs | 40 |
1 files changed, 17 insertions, 23 deletions
@@ -286,23 +286,16 @@ waitEvent :: Display -> XEventPtr -> IO HandledEvent waitEvent display event = do nextEvent display event ty <- get_EventType event - if ty == expose - then pure Expose - else - if ty == graphicsExpose - then pure GraphicsExpose - else - if ty == noExpose - then pure NoExpose - else - if ty == selectionRequest - then Selection <$> getEvent event - else - if ty == selectionNotify - then pure Notify - else do - ev <- get_KeyEvent event - pure $ Key ev + case () of + () + | ty == expose -> pure Expose + | ty == graphicsExpose -> pure GraphicsExpose + | ty == noExpose -> pure NoExpose + | ty == selectionRequest -> Selection <$> getEvent event + | ty == selectionNotify -> pure $ Notify + | otherwise -> do + ev <- get_KeyEvent event + pure $ Key ev handleEvent :: MVar Buffer -> Display -> Drawable -> XftColor -> XftColor -> XftColor -> XftColor -> XftFont -> HandledEvent -> IO () handleEvent buffer display win bgcolour fgcolour linecolour selcolour font event = do @@ -363,15 +356,15 @@ handleEvent buffer display win bgcolour fgcolour linecolour selcolour font event -- ctrl-c (copy) storeBuffer display (R.toText selstr & T.unpack) 0 xSetSelectionOwner display pRIMARY win time - xSetSelectionOwner display sECONDARY win time + xSetSelectionOwner display cLIPBOARD win time (4, 120) -> do -- ctrl-x (cut) storeBuffer display (R.toText selstr & T.unpack) 0 + xSetSelectionOwner display cLIPBOARD win time delins start end "" (4, 118) -> do -- ctrl-v (paste) - prop <- internAtom display "JTERM_CLIPBOARD" False - xConvertSelection display pRIMARY xUtf8String prop win time + xConvertSelection display pRIMARY xUtf8String jTCLIPBOARD win time (4, 113) -> do -- ctrl-q (write log) home <- getEnv "HOME" @@ -417,8 +410,7 @@ handleEvent buffer display win bgcolour fgcolour linecolour selcolour font event delins' True (ptycursor b) (ptycursor b) $ R.fromText expandedTabs when (pos b + pageheight > cl) redraw Notify -> do - prop <- internAtom display "JTERM_CLIPBOARD" False - getWindowProperty8 display prop win >>= \case + getWindowProperty8 display jTCLIPBOARD win >>= \case Just (R.fromText . T.pack . map castCCharToChar -> str) -> do delins start end str redraw @@ -436,7 +428,9 @@ handleEvent buffer display win bgcolour fgcolour linecolour selcolour font event flush display _ -> pure () where - xUtf8String = 315 :: Atom + xUtf8String = unsafePerformIO $ internAtom display "UTF8_STRING" False + jTCLIPBOARD = unsafePerformIO $ internAtom display "JTERM_CLIPBOARD" False + cLIPBOARD = unsafePerformIO $ internAtom display "CLIPBOARD" False updateBuffer' f = modifyMVar_ buffer $ \x -> f x updateBuffer f = modifyMVar_ buffer $ \x -> pure $ f x |
