diff options
Diffstat (limited to 'jterm.hs')
| -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 | 
