module System.Console.ANSI.Unix (
#include "Exports-Include.hs"
) where
import System.Console.ANSI.Common
import Data.List
#include "Common-Include.hs"
csi :: [Int] -> String -> IO ()
csi args code = putStr $ "\ESC[" ++ concat (intersperse ";" (map show args)) ++ code
cursorUp n = csi [n] "A"
cursorDown n = csi [n] "B"
cursorForward n = csi [n] "C"
cursorBackward n = csi [n] "D"
nextLine n = csi [n] "E"
previousLine n = csi [n] "F"
setColumn n = csi [n + 1] "G"
setPosition n m = csi [n + 1, m + 1] "H"
clearFromCursorToScreenEnd = csi [0] "J"
clearFromCursorToScreenBeginning = csi [1] "J"
clearScreen = csi [2] "J"
clearFromCursorToLineEnd = csi [0] "K"
clearFromCursorToLineBeginning = csi [1] "K"
clearLine = csi [2] "K"
scrollPageUp n = csi [n] "S"
scrollPageDown n = csi [n] "T"
setSGR sgr = csi [ansiSGRToCode sgr] "m"
hideCursor = csi [] "?25l"
showCursor = csi [] "?25h"
ansiColorToCode :: ANSIColor -> Int
ansiColorToCode color = case color of
Black -> 0
Red -> 1
Green -> 2
Yellow -> 3
Blue -> 4
Magenta -> 5
Cyan -> 6
White -> 7
ansiSGRToCode :: ANSISGR -> Int
ansiSGRToCode sgr = case sgr of
Reset -> 0
BoldIntensity -> 1
FaintIntensity -> 2
NormalIntensity -> 22
Italic -> 3
SingleUnderline -> 4
DoubleUnderline -> 21
NoUnderline -> 24
SlowBlink -> 5
RapidBlink -> 6
NoBlink -> 25
Conceal -> 8
Reveal -> 28
SwapForegroundBackground -> 7
DontSwapForegroundBackground -> 27
ForegroundNormalIntensity color -> 30 + ansiColorToCode color
ForegroundHighIntensity color -> 90 + ansiColorToCode color
BackgroundNormalIntensity color -> 40 + ansiColorToCode color
BackgroundHighIntensity color -> 100 + ansiColorToCode color