zwirn-0.2.3.1: app/zwirnmill/UI.hs
module UI where
import Brick hiding (on)
import Control.Monad (when)
import Control.Monad.RWS
import EnvBrowser.Event (updateEnvBrowser)
import qualified Graphics.Vty as V
import qualified Graphics.Vty.CrossPlatform as VCP
import System.IO (hFlush, stdout)
import UI.Attributes
import UI.Core
import UI.Draw
import UI.Event
app :: App AppState AppEvent Name
app =
App
{ appDraw = drawUI,
appChooseCursor = showFirstCursor,
appHandleEvent = handleEvent,
appStartEvent = setLineCursor >> updateEnvBrowser,
appAttrMap = const attributeMap
}
runUI :: AppState -> IO AppState
runUI initialState = do
let buildVty = VCP.mkVty V.defaultConfig {V.configInputMap = [(Nothing, "\ESC[13;5u", V.EvKey V.KEnter [V.MCtrl])]}
vty <- buildVty
let output = V.outputIface vty
when (V.supportsMode output V.Mouse) $
V.setMode output V.Mouse True
when (V.supportsMode output V.BracketedPaste) $
V.setMode output V.BracketedPaste True
customMain vty buildVty (Just $ asChan initialState) app initialState {asVtyOutput = Just output}
setLineCursor :: EventM n s ()
setLineCursor = liftIO $ do
putStr "\ESC[5 q"
hFlush stdout