Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Provides ANSI terminal support for Windows and ANSI terminal software running on a Unix-like operating system.
The ANSI escape codes are described at http://en.wikipedia.org/wiki/ANSI_escape_code and provide a rich range of functionality for terminal control, which includes:
- Colored text output, with control over both foreground and background colors
- Hiding or showing the cursor
- Moving the cursor around
- Clearing parts of the screen
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:
- Vanilla: has an
IO ()
type and doesn't take aHandle
. 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. - Chocolate: has an
IO ()
type but takes aHandle
. 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. - Strawberry: has a
String
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.
Example:
-- 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"
For many more examples, see the project's extensive Example.hs file.
- data Color
- data ColorIntensity
- data ConsoleLayer
- data BlinkSpeed
- data Underlining
- data ConsoleIntensity
- data 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
- scrollPageUp :: Int -> IO ()
- scrollPageDown :: Int -> IO ()
- hScrollPageUp :: Handle -> Int -> IO ()
- hScrollPageDown :: Handle -> Int -> IO ()
- scrollPageUpCode :: Int -> String
- scrollPageDownCode :: Int -> String
- setSGR :: [SGR] -> IO ()
- hSetSGR :: Handle -> [SGR] -> IO ()
- setSGRCode :: [SGR] -> String
- hideCursor :: IO ()
- showCursor :: IO ()
- hHideCursor :: Handle -> IO ()
- hShowCursor :: Handle -> IO ()
- hideCursorCode :: String
- showCursorCode :: String
- setTitle :: String -> IO ()
- hSetTitle :: Handle -> String -> IO ()
- setTitleCode :: String -> String
- hSupportsANSI :: Handle -> IO Bool
Basic data types
ANSI colors: come in various intensities, which are controlled by ColorIntensity
data ColorIntensity Source
ANSI colors come in two intensities
data ConsoleLayer Source
ANSI colors can be set on two different layers
data BlinkSpeed Source
ANSI blink speeds: values other than NoBlink
are not widely supported
SlowBlink | Less than 150 blinks per minute |
RapidBlink | More than 150 blinks per minute |
NoBlink |
data Underlining Source
ANSI text underlining
SingleUnderline | |
DoubleUnderline | Not widely supported |
NoUnderline |
data ConsoleIntensity Source
ANSI general console intensity: usually treated as setting the font style (e.g. BoldIntensity
causes text to be bold)
BoldIntensity | |
FaintIntensity | Not widely supported: sometimes treated as concealing text |
NormalIntensity |
ANSI Select Graphic Rendition command
Reset | |
SetConsoleIntensity ConsoleIntensity | |
SetItalicized Bool | Not widely supported: sometimes treated as swapping foreground and background |
SetUnderlining Underlining | |
SetBlinkSpeed BlinkSpeed | |
SetVisible Bool | Not widely supported |
SetSwapForegroundBackground Bool | |
SetColor ConsoleLayer ColorIntensity Color |
Cursor movement by character
Cursor movement by line
Directly changing cursor position
Clearing parts of the screen
clearScreen :: IO () Source
hClearFromCursorToScreenEnd :: Handle -> IO () Source
hClearFromCursorToScreenBeginning :: Handle -> IO () Source
hClearScreen :: Handle -> IO () Source
clearFromCursorToLineEnd :: IO () Source
hClearFromCursorToLineEnd :: Handle -> IO () Source
hClearFromCursorToLineBeginning :: Handle -> IO () Source
hClearLine :: Handle -> IO () Source
Scrolling the screen
Scroll the displayed information up or down the terminal: not widely supported
Scroll the displayed information up or down the terminal: not widely supported
Scroll the displayed information up or down the terminal: not widely supported
Scroll the displayed information up or down the terminal: not widely supported
Scroll the displayed information up or down the terminal: not widely supported
Scroll the displayed information up or down the terminal: not widely supported
Select Graphic Rendition mode: colors and other whizzy stuff
:: [SGR] | Commands: these will typically be applied on top of the current console SGR mode.
An empty list of commands is equivalent to the list |
-> IO () |
Set the Select Graphic Rendition mode
:: Handle | |
-> [SGR] | Commands: these will typically be applied on top of the current console SGR mode.
An empty list of commands is equivalent to the list |
-> IO () |
Set the Select Graphic Rendition mode
:: [SGR] | Commands: these will typically be applied on top of the current console SGR mode.
An empty list of commands is equivalent to the list |
-> String |
Set the Select Graphic Rendition mode
Cursor visibilty changes
hideCursor :: IO () Source
showCursor :: IO () Source
hHideCursor :: Handle -> IO () Source
hShowCursor :: Handle -> IO () Source
Changing the title
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.
Checking if handle supports ANSI
hSupportsANSI :: Handle -> IO Bool Source
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 TERM
environment variable doesn't say dumb
(whcih is what
Emacs sets for its own terminal).