@@ -0,0 +1,42 @@
5+import Control.Applicative
7+import Control.Monad.RWS
9+import Data.Sequence (Seq, (<|) )
10+import qualified Data.Sequence as Seq
13+event_buffer_size = 1000
15+type App = RWST Vty () (Seq String) IO
19+ _ <- execRWST vty_interact vty Seq.empty
22+vty_interact :: App ()
25+ done <- handle_next_event
26+ unless done vty_interact
28+update_display :: App ()
30+ let info = string def_attr "Press ESC to exit."
31+ event_log <- foldMap (string def_attr) <$> get
32+ let pic = pic_for_layers [info,event_log]
34+ liftIO $ update vty pic
36+handle_next_event = ask >>= liftIO . next_event >>= handle_event
38+ handle_event (EvKey KEsc []) = return True
40+ modify $ (<|) (show e) >>> Seq.take event_buffer_size