packages feed

brick-2.3.2: programs/UnixSuspendDemo.hs

module Main where

import qualified Graphics.Vty as V

import qualified Brick.Main as M
import qualified Brick.Types as T
import Brick.Widgets.Core (str)
import qualified Brick.AttrMap as A
import System.Posix.Signals

drawUI :: () -> [T.Widget ()]
drawUI () = [str "Press C-z to suspend or any other key to quit"]

appEvent :: T.BrickEvent () e -> T.EventM () () ()
appEvent (T.VtyEvent (V.EvKey (V.KChar 'z') [V.MCtrl])) = do
    st <- T.get
    M.suspendAndResume $ do
        raiseSignal keyboardStop
        return st
appEvent _ =
    M.halt

theApp :: M.App () e ()
theApp =
    M.App { M.appDraw = drawUI
          , M.appChooseCursor = M.neverShowCursor
          , M.appHandleEvent = appEvent
          , M.appStartEvent = return ()
          , M.appAttrMap = const $ A.attrMap V.defAttr []
          }

main :: IO ()
main = M.defaultMain theApp ()