-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Simple ANSI terminal support, with Windows compatibility
--   
--   ANSI terminal support for Haskell: allows cursor movement, screen
--   clearing, color output showing or hiding the cursor, and changing the
--   title. Compatible with Windows and those Unixes with ANSI terminals,
--   but only GHC is supported as a compiler.
@package ansi-terminal
@version 0.6.2.3


-- | Provides ANSI terminal support for Windows and ANSI terminal software
--   running on a Unix-like operating system.
--   
--   The ANSI escape codes are described at
--   <a>http://en.wikipedia.org/wiki/ANSI_escape_code</a> and provide a
--   rich range of functionality for terminal control, which includes:
--   
--   <ul>
--   <li>Colored text output, with control over both foreground and
--   background colors</li>
--   <li>Hiding or showing the cursor</li>
--   <li>Moving the cursor around</li>
--   <li>Clearing parts of the screen</li>
--   </ul>
--   
--   The most frequently used parts of this ANSI command set are exposed
--   with a platform independent interface by this module. Every function
--   exported comes in three flavours:
--   
--   <ul>
--   <li>Vanilla: has an <tt>IO ()</tt> type and doesn't take a
--   <tt>Handle</tt>. This just outputs the ANSI command directly on to the
--   terminal corresponding to stdout. Commands issued like this should
--   work as you expect on both Windows and Unix.</li>
--   <li>Chocolate: has an <tt>IO ()</tt> type but takes a <tt>Handle</tt>.
--   This outputs the ANSI command on the terminal corresponding to the
--   supplied handle. Commands issued like this should also work as your
--   expect on both Windows and Unix.</li>
--   <li>Strawberry: has a <tt>String</tt> type and just consists of an
--   escape code which can be added to any other bit of text before being
--   output. This version of the API is often convenient to use, but due to
--   fundamental limitations in Windows ANSI terminal support will only
--   work on Unix. On Windows these codes will always be the empty string,
--   so it is possible to use them portably for e.g. coloring console
--   output on the understanding that you will only see colors if you are
--   running on a Unix-like operating system.</li>
--   </ul>
--   
--   Example:
--   
--   <pre>
--   -- Set colors and write some text in those colors.
--   sgrExample :: IO ()
--   sgrExample = do
--       setSGR [SetColor Foreground Vivid Red]
--       setSGR [SetColor Background Vivid Blue]
--       putStr "Red-On-Blue"
--       setSGR [Reset]
--       putStr "White-On-Black"
--   </pre>
--   
--   For many more examples, see the project's extensive <a>Example.hs</a>
--   file.
module System.Console.ANSI

-- | ANSI colors: come in various intensities, which are controlled by
--   <a>ColorIntensity</a>
data Color
Black :: Color
Red :: Color
Green :: Color
Yellow :: Color
Blue :: Color
Magenta :: Color
Cyan :: Color
White :: Color

-- | ANSI colors come in two intensities
data ColorIntensity
Dull :: ColorIntensity
Vivid :: ColorIntensity

-- | ANSI colors can be set on two different layers
data ConsoleLayer
Foreground :: ConsoleLayer
Background :: ConsoleLayer

-- | ANSI blink speeds: values other than <a>NoBlink</a> are not widely
--   supported
data BlinkSpeed

-- | Less than 150 blinks per minute
SlowBlink :: BlinkSpeed

-- | More than 150 blinks per minute
RapidBlink :: BlinkSpeed
NoBlink :: BlinkSpeed

-- | ANSI text underlining
data Underlining
SingleUnderline :: Underlining

-- | Not widely supported
DoubleUnderline :: Underlining
NoUnderline :: Underlining

-- | ANSI general console intensity: usually treated as setting the font
--   style (e.g. <a>BoldIntensity</a> causes text to be bold)
data ConsoleIntensity
BoldIntensity :: ConsoleIntensity

-- | Not widely supported: sometimes treated as concealing text
FaintIntensity :: ConsoleIntensity
NormalIntensity :: ConsoleIntensity

-- | ANSI Select Graphic Rendition command
data SGR
Reset :: SGR
SetConsoleIntensity :: ConsoleIntensity -> SGR

-- | Not widely supported: sometimes treated as swapping foreground and
--   background
SetItalicized :: Bool -> SGR
SetUnderlining :: Underlining -> SGR
SetBlinkSpeed :: BlinkSpeed -> SGR

-- | Not widely supported
SetVisible :: Bool -> SGR
SetSwapForegroundBackground :: Bool -> SGR
SetColor :: ConsoleLayer -> ColorIntensity -> Color -> SGR
cursorUp :: Int -> IO ()
cursorDown :: Int -> IO ()
cursorForward :: Int -> IO ()
cursorBackward :: Int -> IO ()
hCursorUp :: Handle -> Int -> IO ()
hCursorDown :: Handle -> Int -> IO ()
hCursorForward :: Handle -> Int -> IO ()
hCursorBackward :: Handle -> Int -> IO ()
cursorUpCode :: Int -> String
cursorDownCode :: Int -> String
cursorForwardCode :: Int -> String
cursorBackwardCode :: Int -> String
cursorUpLine :: Int -> IO ()
cursorDownLine :: Int -> IO ()
hCursorUpLine :: Handle -> Int -> IO ()
hCursorDownLine :: Handle -> Int -> IO ()
cursorUpLineCode :: Int -> String
cursorDownLineCode :: Int -> String
setCursorColumn :: Int -> IO ()
hSetCursorColumn :: Handle -> Int -> IO ()
setCursorColumnCode :: Int -> String
setCursorPosition :: Int -> Int -> IO ()
hSetCursorPosition :: Handle -> Int -> Int -> IO ()
setCursorPositionCode :: Int -> Int -> String
clearFromCursorToScreenEnd :: IO ()
clearFromCursorToScreenBeginning :: IO ()
clearScreen :: IO ()
hClearFromCursorToScreenEnd :: Handle -> IO ()
hClearFromCursorToScreenBeginning :: Handle -> IO ()
hClearScreen :: Handle -> IO ()
clearFromCursorToScreenEndCode :: String
clearFromCursorToScreenBeginningCode :: String
clearScreenCode :: String
clearFromCursorToLineEnd :: IO ()
clearFromCursorToLineBeginning :: IO ()
clearLine :: IO ()
hClearFromCursorToLineEnd :: Handle -> IO ()
hClearFromCursorToLineBeginning :: Handle -> IO ()
hClearLine :: Handle -> IO ()
clearFromCursorToLineEndCode :: String
clearFromCursorToLineBeginningCode :: String
clearLineCode :: String

-- | Scroll the displayed information up or down the terminal: not widely
--   supported
scrollPageUp :: Int -> IO ()

-- | Scroll the displayed information up or down the terminal: not widely
--   supported
scrollPageDown :: Int -> IO ()

-- | Scroll the displayed information up or down the terminal: not widely
--   supported
hScrollPageUp :: Handle -> Int -> IO ()

-- | Scroll the displayed information up or down the terminal: not widely
--   supported
hScrollPageDown :: Handle -> Int -> IO ()

-- | Scroll the displayed information up or down the terminal: not widely
--   supported
scrollPageUpCode :: Int -> String

-- | Scroll the displayed information up or down the terminal: not widely
--   supported
scrollPageDownCode :: Int -> String

-- | Set the Select Graphic Rendition mode
setSGR :: [SGR] -> IO ()

-- | Set the Select Graphic Rendition mode
hSetSGR :: Handle -> [SGR] -> IO ()

-- | Set the Select Graphic Rendition mode
setSGRCode :: [SGR] -> String
hideCursor :: IO ()
showCursor :: IO ()
hHideCursor :: Handle -> IO ()
hShowCursor :: Handle -> IO ()
hideCursorCode :: String
showCursorCode :: String

-- | Set the terminal window title
setTitle :: String -> IO ()

-- | Set the terminal window title
hSetTitle :: Handle -> String -> IO ()

-- | Set the terminal window title
--   
--   Thanks to Brandon S. Allbery and Curt Sampson for pointing me in the
--   right direction on xterm title setting on haskell-cafe. The "0"
--   signifies that both the title and "icon" text should be set: i.e. the
--   text for the window in the Start bar (or similar) as well as that in
--   the actual window title. This is chosen for consistent behaviour
--   between Unixes and Windows.
setTitleCode :: String -> String

-- | Use heuristics to determine whether the functions defined in this
--   package will work with a given handle.
--   
--   The current implementation checks that the handle is a terminal, and
--   that the <tt>TERM</tt> environment variable doesn't say <tt>dumb</tt>
--   (whcih is what Emacs sets for its own terminal).
hSupportsANSI :: Handle -> IO Bool
