summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bedo <cu@cua0.org>2025-09-19 11:14:07 +1000
committerJustin Bedo <cu@cua0.org>2025-09-19 12:50:00 +1000
commit95919d486a475eb490387bf858c0cf1918629028 (patch)
treebc42a35178d0b6573b612142d588796a10ae3125
parentef0301f1feddc591d9307e07a867e099b2e4272e (diff)
fix clipboard
-rw-r--r--jterm.hs40
1 files changed, 17 insertions, 23 deletions
diff --git a/jterm.hs b/jterm.hs
index 8091f81..04910e0 100644
--- a/jterm.hs
+++ b/jterm.hs
@@ -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