-- | Through this module, this library provides platform-independent support -- for control character sequences following the \'ANSI\' standards (see further -- below) for terminal software that supports those sequences, running on a -- Unix-like operating system or Windows. -- -- The sequences of control characters (also referred to as \'escape\' sequences -- or codes) provide a rich range of functionality for terminal control, which -- includes: -- -- * 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 -- -- * Changing the title of the terminal -- -- The functions moving the cursor to an absolute position are 0-based (the -- top-left corner is considered to be at row 0 column 0) (see -- 'setCursorPosition') and so is 'getCursorPosition0'. The \'ANSI\' standards -- themselves are 1-based (that is, the top-left corner is considered to be at -- row 1 column 1) and some functions reporting the position of the cursor are -- too (see 'reportCursorPosition'). -- -- The native terminal software on Windows is \'Command Prompt\' or -- \`PowerShell\`. Before Windows 10 version 1511 (known as the \'November -- [2015] Update\' or \'Threshold 2\') that software did not support such -- control sequences. For that software, this library also provides support for -- such sequences by using emulation. -- -- Terminal software other than the native software exists for Windows. One -- example is the \'mintty\' terminal emulator for \'Cygwin\', \'MSYS\' or -- \'MSYS2\', and dervied projects, and for \'WSL\' (Windows Subsystem for -- Linux). -- -- The \'ANSI\' standards refer to (1) standard ECMA-48 \`Control Functions for -- Coded Character Sets\' (5th edition, 1991); (2) extensions in ITU-T -- Recommendation (previously CCITT Recommendation) T.416 (03/93) \'Information -- Technology – Open Document Architecture (ODA) and Interchange Format: -- Character Content Architectures\` (also published as ISO/IEC International -- Standard 8613-6); and (3) further extensions used by \'XTerm\', a terminal -- emulator for the X Window System. The escape codes are described in a -- Wikipedia article at <http://en.wikipedia.org/wiki/ANSI_escape_code> and -- those codes supported on current versions of Windows at -- <https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences>. -- -- The whole of the \'ANSI\' standards are not supported by this library but -- most (if not all) of the parts that are popular and well-supported by -- terminal software are supported. Every function exported by this module comes -- in three variants, namely: -- -- * A variant that has an @IO ()@ type and doesn't take a @Handle@ (for -- example, @clearScreen :: IO ()@). This variant just outputs the \`ANSI\` -- command directly to the standard output channel ('stdout') and any -- terminal corresponding to it. Commands issued like this should work as you -- expect on both Unix-like operating systems and Windows. -- -- * An \'@h@...\' variant that has an @IO ()@ type but takes a @Handle@ (for -- example, @hClearScreen :: Handle -> IO ()@). This variant outputs the -- \`ANSI\` command to the supplied handle and any terminal corresponding to -- it. Commands issued like this should also work as you expect on both -- Unix-like operating systems and Windows. -- -- * A \'...@Code@\' variant that has a @String@ type (for example, -- @clearScreenCode :: String@). This variant outputs the sequence of control -- characters as a 'String', which can be added to any other bit of text -- before being output. The use of these codes is generally discouraged -- because they will not work on legacy versions of Windows where the -- terminal in use is not ANSI-enabled (see further above). On Windows, where -- emulation has been necessary, these variants will always output the empty -- string. That is done so that it is possible to use them portably; for -- example, coloring console output on the understanding that you will see -- colors only if you are running on a Unix-like operating system or a -- version of Windows where emulation has not been necessary. If the control -- characters are always required, see module "System.Console.ANSI.Codes". -- -- Example: -- -- > module Main where -- > -- > import System.Console.ANSI -- > -- > -- Set colors and write some text in those colors. -- > main = do -- > setSGR [SetColor Foreground Vivid Red] -- > setSGR [SetColor Background Vivid Blue] -- > putStrLn "Red-On-Blue" -- > setSGR [Reset] -- Reset to default colour scheme -- > putStrLn "Default colors." -- -- For many more examples, see the project's extensive -- <https://github.com/feuerbach/ansi-terminal/blob/master/app/Example.hs Example.hs> file. #if defined(WINDOWS) module System.Console.ANSI ( module System.Console.ANSI.Windows ) where import System.Console.ANSI.Windows #elif defined(UNIX) module System.Console.ANSI ( module System.Console.ANSI.Unix ) where import System.Console.ANSI.Unix #else #error Unsupported platform for the ansi-terminal package #endif