Simple ANSI terminal support.
ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output, showing or hiding the cursor, and changing the title. Works on UNIX and Windows.
ansi-terminal
A Haskell package providing support for 'ANSI' control character sequences for terminals on Unix-like operating systems and Windows
Description
'ANSI' terminal escape code support for Haskell, which allows:
- Colored text output, with control over both foreground and background colors
- Clearing parts of a line or the screen
- Hiding or showing the cursor
- Moving the cursor around
- Reporting the position of the cursor
- Scrolling the screen up or down
- Switching between the Alternate and Normal Screen Buffers
- Clickable hyperlinks to URIs
- Changing the title of the terminal
If you like this, you may be interested in ansi-wl-pprint, which provides a pretty-printer that can construct strings containing 'ANSI' colorisation.
Not all 'ANSI' escape codes are suported by this library but most (if not all) of the popular ones that are well-supported by terminal software are, including:
- Select Graphic Rendition mode (colors and other attributes):
setSGR
- Clearing parts of the screen:
clearFromCursorToScreenEnd
,clearFromCursorToScreenBeginning
,clearScreen
,clearFromCursorToLineEnd
,clearFromCursorToLineBeginning
andclearLine
- Cursor visibility changes:
hideCursor
andshowCursor
- Cursor movement by character:
cursorUp
,cursorDown
,cursorForward
andcursorBackward
- Cursor movement by line:
cursorUpLine
andcursorDownLine
- Directly changing cursor position:
setCursorColumn
andsetCursorPosition
- Saving, restoring and reporting cursor position:
saveCursor
,restoreCursor
andreportCursorPosition
- Scrolling the screen:
scrollPageUp
andscrollPageDown
- Changing the title:
setTitle
Each supported escape code or family of codes has a corresponding function that comes in three variants:
- A straight
IO
variant that doesn't take aHandle
and just applies the escape code tostdout
and any terminal attached to it - An
IO
variant similar to above, but which takes aHandle
to which the escape code should be applied - A
String
variant that returns a literal string that should be included to get the effect of the code.
Example
A full example is available, but for a taste of how the library works try the following code:
import System.Console.ANSI
import System.IO (stdout)
main :: IO ()
main = do
stdoutSupportsANSI <- hNowSupportsANSI stdout
if stdoutSupportsANSI
then do
setCursorPosition 5 0
setTitle "ANSI Terminal Short Example"
setSGR [ SetConsoleIntensity BoldIntensity
, SetColor Foreground Vivid Red
]
putStr "Hello"
setSGR [ SetConsoleIntensity NormalIntensity
, SetColor Foreground Vivid White
, SetColor Background Dull Blue
]
putStrLn "World!"
else
putStrLn "Standard output does not support 'ANSI' escape codes."
Documentation
Haddock documentation is available at Hackage.
Credits
The library is originally written by Max Bolingbroke
Maintainers
Mike Pilgrem and Roman Cheplyaka are the primary maintainers.
Oliver Charles is the backup maintainer. Please get in touch with him if the primary maintainers cannot be reached.