1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
module Main where
import Graphics.Vty
import Graphics.Vty.CrossPlatform (mkVty)
mkUI :: (Bool, Bool, Bool, Bool, Bool, Bool) -> Maybe Event -> Image
mkUI (m, ms, p, ps, f, fs) e =
vertCat [ string defAttr $ "Mouse mode supported: " <> show m
, string defAttr $ "Mouse mode status: " <> show ms
, string defAttr " "
, string defAttr $ "Paste mode supported: " <> show p
, string defAttr $ "Paste mode status: " <> show ps
, string defAttr " "
, string defAttr $ "Focus mode supported: " <> show f
, string defAttr $ "Focus mode status: " <> show fs
, string defAttr " "
, string defAttr $ "Last event: " <> show e
, string defAttr " "
, string defAttr "Press 'm' to toggle mouse mode, 'p' to toggle paste mode,"
, string defAttr "'f' to toggle focus mode, and 'q' to quit."
]
main :: IO ()
main = do
vty <- mkVty defaultConfig
let renderUI lastE = do
let output = outputIface vty
info <- (,,,,,) <$> (pure $ supportsMode output Mouse)
<*> getModeStatus output Mouse
<*> (pure $ supportsMode output BracketedPaste)
<*> getModeStatus output BracketedPaste
<*> (pure $ supportsMode output Focus)
<*> getModeStatus output Focus
return $ picForImage $ mkUI info lastE
let go lastE = do
pic <- renderUI lastE
update vty pic
e <- nextEvent vty
case e of
EvKey (KChar 'q') [] -> return ()
EvKey (KChar 'm') [] -> do
let output = outputIface vty
enabled <- getModeStatus output Mouse
setMode output Mouse (not enabled)
go (Just e)
EvKey (KChar 'p') [] -> do
let output = outputIface vty
enabled <- getModeStatus output BracketedPaste
setMode output BracketedPaste (not enabled)
go (Just e)
EvKey (KChar 'f') [] -> do
let output = outputIface vty
enabled <- getModeStatus output Focus
setMode output Focus (not enabled)
go (Just e)
_ -> go (Just e)
go Nothing
shutdown vty
|