blob: 6d57d11232792fe50b74ce25e03ddd2d2dd1198a (
plain)
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
|
{-|
Module : System.IO.Terminal.IO
Copyright : (c) UU, 2019
License : MIT
Maintainer : Tom Smeding
Stability : experimental
Portability : POSIX, macOS, Windows
Extra terminal management utility functions. This module basically extends
the @ansi-terminal@ package.
-}
module System.IO.Terminal.IO (
queryTermSize,
toAlternateScreen,
fromAlternateScreen,
) where
import qualified System.Console.Terminal.Size as TS
import System.Exit
import System.IO
-- | Request the current terminal size from the terminal. Probably not very
-- fast.
queryTermSize :: IO (Int, Int)
queryTermSize = TS.size >>= \case
Just win -> return (TS.width win, TS.height win)
Nothing -> die "ERROR: Cannot get terminal size"
-- | Switch to the \"alternate screen\", if the terminal supports it.
toAlternateScreen :: IO ()
toAlternateScreen = putStr "\x1B[?1049h" >> hFlush stdout
-- | Switch from the \"alternate screen\" back to the normal buffer, if the
-- terminal supports it.
fromAlternateScreen :: IO ()
fromAlternateScreen = putStr "\x1B[?1049l" >> hFlush stdout
|