packages feed

ansi-terminal-0.6.3: System/Console/ANSI/Windows.hs

{-# OPTIONS_HADDOCK hide #-}
module System.Console.ANSI.Windows (
#include "Exports-Include.hs"
    ) where

import System.Console.ANSI.Types
import qualified System.Console.ANSI.Unix as U
import System.Console.ANSI.Windows.Detect (isANSIEnabled)
import qualified System.Console.ANSI.Windows.Emulator as E
import System.IO (Handle, hIsTerminalDevice, stdout)

#include "Common-Include.hs"

-- * Cursor movement by character
hCursorUp = if isANSIEnabled then U.hCursorUp else E.hCursorUp

hCursorDown = if isANSIEnabled then U.hCursorDown else E.hCursorDown

hCursorForward = if isANSIEnabled then U.hCursorForward else E.hCursorForward

hCursorBackward = if isANSIEnabled then U.hCursorBackward else E.hCursorBackward

cursorUpCode :: Int -> String
cursorUpCode = if isANSIEnabled then U.cursorUpCode else E.cursorUpCode

cursorDownCode :: Int -> String
cursorDownCode = if isANSIEnabled then U.cursorDownCode else E.cursorDownCode

cursorForwardCode :: Int -> String
cursorForwardCode = if isANSIEnabled
                    then U.cursorForwardCode
                    else E.cursorForwardCode

cursorBackwardCode :: Int -> String
cursorBackwardCode = if isANSIEnabled
                     then U.cursorBackwardCode
                     else E.cursorBackwardCode

-- * Cursor movement by line
hCursorUpLine = if isANSIEnabled then U.hCursorUpLine else E.hCursorUpLine

hCursorDownLine = if isANSIEnabled then U.hCursorDownLine else E.hCursorDownLine

cursorUpLineCode :: Int -> String
cursorUpLineCode = if isANSIEnabled
                   then U.cursorUpLineCode
                   else E.cursorUpLineCode

cursorDownLineCode :: Int -> String
cursorDownLineCode = if isANSIEnabled
                     then U.cursorDownLineCode
                     else E.cursorDownLineCode

-- * Directly changing cursor position
hSetCursorColumn = if isANSIEnabled
                   then U.hSetCursorColumn
                   else E.hSetCursorColumn

setCursorColumnCode :: Int -> String
setCursorColumnCode = if isANSIEnabled
                      then U.setCursorColumnCode
                      else E.setCursorColumnCode

hSetCursorPosition = if isANSIEnabled
                     then U.hSetCursorPosition
                     else E.hSetCursorPosition

setCursorPositionCode :: Int -> Int -> String
setCursorPositionCode = if isANSIEnabled
                        then U.setCursorPositionCode
                        else E.setCursorPositionCode

-- * Clearing parts of the screen
hClearFromCursorToScreenEnd = if isANSIEnabled
                              then U.hClearFromCursorToScreenEnd
                              else E.hClearFromCursorToScreenEnd

hClearFromCursorToScreenBeginning = if isANSIEnabled
                                    then U.hClearFromCursorToScreenBeginning
                                    else E.hClearFromCursorToScreenBeginning

hClearScreen = if isANSIEnabled then U.hClearScreen else E.hClearScreen

clearFromCursorToScreenEndCode :: String
clearFromCursorToScreenEndCode = if isANSIEnabled
                                 then U.clearFromCursorToScreenEndCode
                                 else E.clearFromCursorToScreenEndCode

clearFromCursorToScreenBeginningCode :: String
clearFromCursorToScreenBeginningCode =
    if isANSIEnabled
    then U.clearFromCursorToScreenBeginningCode
    else E.clearFromCursorToScreenBeginningCode

clearScreenCode :: String
clearScreenCode = if isANSIEnabled then U.clearScreenCode else E.clearScreenCode

hClearFromCursorToLineEnd = if isANSIEnabled
                            then U.hClearFromCursorToLineEnd
                            else E.hClearFromCursorToLineEnd

hClearFromCursorToLineBeginning = if isANSIEnabled
                                  then U.hClearFromCursorToLineBeginning
                                  else E.hClearFromCursorToLineBeginning

hClearLine = if isANSIEnabled then U.hClearLine else E.hClearLine

clearFromCursorToLineEndCode :: String
clearFromCursorToLineEndCode = if isANSIEnabled
                               then U.clearFromCursorToLineEndCode
                               else E.clearFromCursorToLineEndCode

clearFromCursorToLineBeginningCode :: String
clearFromCursorToLineBeginningCode = if isANSIEnabled
                                     then U.clearFromCursorToLineBeginningCode
                                     else E.clearFromCursorToLineBeginningCode

clearLineCode :: String
clearLineCode = if isANSIEnabled then U.clearLineCode else E.clearLineCode

-- * Scrolling the screen
hScrollPageUp = if isANSIEnabled then U.hScrollPageUp else E.hScrollPageUp
hScrollPageDown = if isANSIEnabled then U.hScrollPageDown else E.hScrollPageDown

scrollPageUpCode :: Int -> String
scrollPageUpCode = if isANSIEnabled
                   then U.scrollPageUpCode
                   else E.scrollPageUpCode

scrollPageDownCode :: Int -> String
scrollPageDownCode = if isANSIEnabled
                     then U.scrollPageDownCode
                     else E.scrollPageDownCode

-- * Select Graphic Rendition mode: colors and other whizzy stuff
--
-- The following SGR codes are NOT implemented by Windows 10 Threshold 2:
-- 2   SetConsoleIntensity FaintIntensity
-- 3   SetItalicized True
-- 5   SetBlinkSpeed SlowBlink
-- 6   SetBlinkSpeed RapidBlink
-- 8   SetVisible False
-- 21  SetUnderlining DoubleUnderline
-- 23  SetItalicized False
-- 25  SetBlinkSpeed NoBlink
-- 28  SetVisible True

hSetSGR = if isANSIEnabled then U.hSetSGR else E.hSetSGR

setSGRCode :: [SGR] -> String
setSGRCode = if isANSIEnabled then U.setSGRCode else E.setSGRCode

-- * Cursor visibilty changes
hHideCursor = if isANSIEnabled then U.hHideCursor else E.hHideCursor

hShowCursor = if isANSIEnabled then U.hShowCursor else E.hShowCursor

hideCursorCode :: String
hideCursorCode = if isANSIEnabled then U.hideCursorCode else E.hideCursorCode

showCursorCode :: String
showCursorCode = if isANSIEnabled then U.showCursorCode else E.showCursorCode

-- * Changing the title
hSetTitle = if isANSIEnabled then U.hSetTitle else E.hSetTitle

setTitleCode :: String -> String
setTitleCode = if isANSIEnabled then U.setTitleCode else E.setTitleCode