module System.Terminal.MonadScreen where
import System.Terminal.MonadPrinter
data Size = Size
{ Size -> Int
height :: {-# UNPACK #-} !Int
, Size -> Int
width :: {-# UNPACK #-} !Int
} deriving (Size -> Size -> Bool
(Size -> Size -> Bool) -> (Size -> Size -> Bool) -> Eq Size
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Size -> Size -> Bool
== :: Size -> Size -> Bool
$c/= :: Size -> Size -> Bool
/= :: Size -> Size -> Bool
Eq, Eq Size
Eq Size =>
(Size -> Size -> Ordering)
-> (Size -> Size -> Bool)
-> (Size -> Size -> Bool)
-> (Size -> Size -> Bool)
-> (Size -> Size -> Bool)
-> (Size -> Size -> Size)
-> (Size -> Size -> Size)
-> Ord Size
Size -> Size -> Bool
Size -> Size -> Ordering
Size -> Size -> Size
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Size -> Size -> Ordering
compare :: Size -> Size -> Ordering
$c< :: Size -> Size -> Bool
< :: Size -> Size -> Bool
$c<= :: Size -> Size -> Bool
<= :: Size -> Size -> Bool
$c> :: Size -> Size -> Bool
> :: Size -> Size -> Bool
$c>= :: Size -> Size -> Bool
>= :: Size -> Size -> Bool
$cmax :: Size -> Size -> Size
max :: Size -> Size -> Size
$cmin :: Size -> Size -> Size
min :: Size -> Size -> Size
Ord, Int -> Size -> ShowS
[Size] -> ShowS
Size -> String
(Int -> Size -> ShowS)
-> (Size -> String) -> ([Size] -> ShowS) -> Show Size
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Size -> ShowS
showsPrec :: Int -> Size -> ShowS
$cshow :: Size -> String
show :: Size -> String
$cshowList :: [Size] -> ShowS
showList :: [Size] -> ShowS
Show)
data Position = Position
{ Position -> Int
row :: {-# UNPACK #-} !Int
, Position -> Int
col :: {-# UNPACK #-} !Int
} deriving (Position -> Position -> Bool
(Position -> Position -> Bool)
-> (Position -> Position -> Bool) -> Eq Position
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Position -> Position -> Bool
== :: Position -> Position -> Bool
$c/= :: Position -> Position -> Bool
/= :: Position -> Position -> Bool
Eq, Eq Position
Eq Position =>
(Position -> Position -> Ordering)
-> (Position -> Position -> Bool)
-> (Position -> Position -> Bool)
-> (Position -> Position -> Bool)
-> (Position -> Position -> Bool)
-> (Position -> Position -> Position)
-> (Position -> Position -> Position)
-> Ord Position
Position -> Position -> Bool
Position -> Position -> Ordering
Position -> Position -> Position
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Position -> Position -> Ordering
compare :: Position -> Position -> Ordering
$c< :: Position -> Position -> Bool
< :: Position -> Position -> Bool
$c<= :: Position -> Position -> Bool
<= :: Position -> Position -> Bool
$c> :: Position -> Position -> Bool
> :: Position -> Position -> Bool
$c>= :: Position -> Position -> Bool
>= :: Position -> Position -> Bool
$cmax :: Position -> Position -> Position
max :: Position -> Position -> Position
$cmin :: Position -> Position -> Position
min :: Position -> Position -> Position
Ord, Int -> Position -> ShowS
[Position] -> ShowS
Position -> String
(Int -> Position -> ShowS)
-> (Position -> String) -> ([Position] -> ShowS) -> Show Position
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Position -> ShowS
showsPrec :: Int -> Position -> ShowS
$cshow :: Position -> String
show :: Position -> String
$cshowList :: [Position] -> ShowS
showList :: [Position] -> ShowS
Show)
data EraseMode
= EraseBackward
| EraseForward
| EraseAll
deriving (EraseMode -> EraseMode -> Bool
(EraseMode -> EraseMode -> Bool)
-> (EraseMode -> EraseMode -> Bool) -> Eq EraseMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EraseMode -> EraseMode -> Bool
== :: EraseMode -> EraseMode -> Bool
$c/= :: EraseMode -> EraseMode -> Bool
/= :: EraseMode -> EraseMode -> Bool
Eq, Eq EraseMode
Eq EraseMode =>
(EraseMode -> EraseMode -> Ordering)
-> (EraseMode -> EraseMode -> Bool)
-> (EraseMode -> EraseMode -> Bool)
-> (EraseMode -> EraseMode -> Bool)
-> (EraseMode -> EraseMode -> Bool)
-> (EraseMode -> EraseMode -> EraseMode)
-> (EraseMode -> EraseMode -> EraseMode)
-> Ord EraseMode
EraseMode -> EraseMode -> Bool
EraseMode -> EraseMode -> Ordering
EraseMode -> EraseMode -> EraseMode
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: EraseMode -> EraseMode -> Ordering
compare :: EraseMode -> EraseMode -> Ordering
$c< :: EraseMode -> EraseMode -> Bool
< :: EraseMode -> EraseMode -> Bool
$c<= :: EraseMode -> EraseMode -> Bool
<= :: EraseMode -> EraseMode -> Bool
$c> :: EraseMode -> EraseMode -> Bool
> :: EraseMode -> EraseMode -> Bool
$c>= :: EraseMode -> EraseMode -> Bool
>= :: EraseMode -> EraseMode -> Bool
$cmax :: EraseMode -> EraseMode -> EraseMode
max :: EraseMode -> EraseMode -> EraseMode
$cmin :: EraseMode -> EraseMode -> EraseMode
min :: EraseMode -> EraseMode -> EraseMode
Ord, Int -> EraseMode -> ShowS
[EraseMode] -> ShowS
EraseMode -> String
(Int -> EraseMode -> ShowS)
-> (EraseMode -> String)
-> ([EraseMode] -> ShowS)
-> Show EraseMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EraseMode -> ShowS
showsPrec :: Int -> EraseMode -> ShowS
$cshow :: EraseMode -> String
show :: EraseMode -> String
$cshowList :: [EraseMode] -> ShowS
showList :: [EraseMode] -> ShowS
Show)
class (MonadPrinter m) => MonadScreen m where
getWindowSize :: m Size
moveCursorUp :: Int -> m ()
moveCursorDown :: Int -> m ()
moveCursorForward :: Int -> m ()
moveCursorBackward :: Int -> m ()
getCursorPosition :: m Position
setCursorPosition :: Position -> m ()
setCursorRow :: Int -> m ()
setCursorColumn :: Int -> m ()
saveCursor :: m ()
restoreCursor :: m ()
insertChars :: Int -> m ()
deleteChars :: Int -> m ()
eraseChars :: Int -> m ()
insertLines :: Int -> m ()
deleteLines :: Int -> m ()
eraseInLine :: EraseMode -> m ()
eraseInDisplay :: EraseMode -> m ()
showCursor :: m ()
hideCursor :: m ()
setAutoWrap :: Bool -> m ()
setAlternateScreenBuffer :: Bool -> m ()