packages feed

ansi-terminal 1.1.2 → 1.1.3

raw patch · 3 files changed

+10/−407 lines, 3 filesdep ~ansi-terminal-typesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: ansi-terminal-types

API changes (from Hackage documentation)

- System.Console.ANSI.Codes: clearFromCursorToLineBeginningCode :: String
- System.Console.ANSI.Codes: clearFromCursorToLineEndCode :: String
- System.Console.ANSI.Codes: clearFromCursorToScreenBeginningCode :: String
- System.Console.ANSI.Codes: clearFromCursorToScreenEndCode :: String
- System.Console.ANSI.Codes: clearLineCode :: String
- System.Console.ANSI.Codes: clearScreenCode :: String
- System.Console.ANSI.Codes: colorToCode :: Color -> Int
- System.Console.ANSI.Codes: csi :: [Parameter] -> String -> String
- System.Console.ANSI.Codes: csi' :: [ParamWithSubs] -> String -> String
- System.Console.ANSI.Codes: cursorBackwardCode :: Int -> String
- System.Console.ANSI.Codes: cursorDownCode :: Int -> String
- System.Console.ANSI.Codes: cursorDownLineCode :: Int -> String
- System.Console.ANSI.Codes: cursorForwardCode :: Int -> String
- System.Console.ANSI.Codes: cursorUpCode :: Int -> String
- System.Console.ANSI.Codes: cursorUpLineCode :: Int -> String
- System.Console.ANSI.Codes: disableLineWrapCode :: String
- System.Console.ANSI.Codes: enableLineWrapCode :: String
- System.Console.ANSI.Codes: hideCursorCode :: String
- System.Console.ANSI.Codes: hyperlinkCode :: String -> String -> String
- System.Console.ANSI.Codes: hyperlinkWithIdCode :: String -> String -> String -> String
- System.Console.ANSI.Codes: hyperlinkWithParamsCode :: [(String, String)] -> String -> String -> String
- System.Console.ANSI.Codes: osc :: String -> String -> String
- System.Console.ANSI.Codes: reportCursorPositionCode :: String
- System.Console.ANSI.Codes: reportLayerColorCode :: ConsoleLayer -> String
- System.Console.ANSI.Codes: restoreCursorCode :: String
- System.Console.ANSI.Codes: saveCursorCode :: String
- System.Console.ANSI.Codes: scrollPageDownCode :: Int -> String
- System.Console.ANSI.Codes: scrollPageUpCode :: Int -> String
- System.Console.ANSI.Codes: setCursorColumnCode :: Int -> String
- System.Console.ANSI.Codes: setCursorPositionCode :: Int -> Int -> String
- System.Console.ANSI.Codes: setSGRCode :: [SGR] -> String
- System.Console.ANSI.Codes: setTitleCode :: String -> String
- System.Console.ANSI.Codes: sgrToCode :: SGR -> [Parameter]
- System.Console.ANSI.Codes: sgrToCode' :: SGR -> Either ParamWithSubs [Parameter]
- System.Console.ANSI.Codes: showCursorCode :: String
- System.Console.ANSI.Codes: type ParamWithSubs = (Parameter, [SubParam])
- System.Console.ANSI.Codes: type Parameter = Int
- System.Console.ANSI.Codes: type SubParam = Maybe Int
- System.Console.ANSI.Codes: useAlternateScreenBufferCode :: String
- System.Console.ANSI.Codes: useNormalScreenBufferCode :: String

Files

CHANGELOG.md view
@@ -1,6 +1,12 @@ Changes
 =======
 
+Version 1.1.3
+-------------
+
+* Module `System.Console.ANSI.Codes` spun out to dependency package
+  `ansi-terminal-types-1.1.3`.
+
 Version 1.1.2
 -------------
 
ansi-terminal.cabal view
@@ -1,6 +1,6 @@ Cabal-Version:       1.22
 Name:                ansi-terminal
-Version:             1.1.2
+Version:             1.1.3
 Category:            User Interfaces
 Synopsis:            Simple ANSI terminal support
 Description:         ANSI terminal support for Haskell: allows cursor movement,
@@ -30,16 +30,16 @@ Library
         Hs-Source-Dirs:         src
         Exposed-Modules:        System.Console.ANSI
-                                System.Console.ANSI.Codes
 
         -- We re-export all of ansi-terminal-types to aid compatibility for
         -- downstream users.
-        Reexported-Modules:     System.Console.ANSI.Types
+        Reexported-Modules:     System.Console.ANSI.Codes
+                              , System.Console.ANSI.Types
 
         Other-Modules:          System.Console.ANSI.Internal
 
         Build-Depends:          base >= 4.8.0.0 && < 5
-                              , ansi-terminal-types == 1.1
+                              , ansi-terminal-types == 1.1.3
                               , colour >= 2.1.0
         if os(windows)
             Hs-Source-Dirs:     win
− src/System/Console/ANSI/Codes.hs
@@ -1,403 +0,0 @@-{-# LANGUAGE Safe          #-}
-{-# LANGUAGE TupleSections #-}
-
-{-| This module exports functions that return 'String' values containing codes
-in accordance with the \'ANSI\' standards for control character sequences
-described in the documentation of module "System.Console.ANSI".
--}
-module System.Console.ANSI.Codes
-  (
-    -- * Basic data types
-    module System.Console.ANSI.Types
-
-    -- * Cursor movement by character
-    --
-    -- | These functions yield @\"\"@ when the number is @0@ as, on some
-    -- terminals, a @0@ parameter for the underlying \'ANSI\' code specifies a
-    -- default parameter of @1@.
-  , cursorUpCode, cursorDownCode, cursorForwardCode, cursorBackwardCode
-
-    -- * Cursor movement by line
-    --
-    -- | These functions yield the equivalent of @setCursorColumnCode 0@ when
-    -- the number is @0@ as, on some terminals, a @0@ parameter for the
-    -- underlying \'ANSI\' code specifies a default parameter of @1@.
-  , cursorUpLineCode, cursorDownLineCode
-
-    -- * Directly changing cursor position
-  , setCursorColumnCode, setCursorPositionCode
-
-    -- * Saving, restoring and reporting cursor position
-  , saveCursorCode, restoreCursorCode, reportCursorPositionCode
-
-    -- * Clearing parts of the screen
-  , clearFromCursorToScreenEndCode, clearFromCursorToScreenBeginningCode
-  , clearScreenCode, clearFromCursorToLineEndCode
-  , clearFromCursorToLineBeginningCode, clearLineCode
-
-    -- * Enabling and disabling automatic line wrapping
-    --
-    -- | These functions control whether or not characters automatically wrap to
-    -- the next line when the cursor reaches the right border.
-  , enableLineWrapCode, disableLineWrapCode
-
-    -- * Scrolling the screen
-    --
-    -- | These functions yield @\"\"@ when the number is @0@ as, on some
-    -- terminals, a @0@ parameter for the underlying \'ANSI\' code specifies a
-    -- default parameter of @1@.
-  , scrollPageUpCode, scrollPageDownCode
-
-    -- * Using screen buffers
-  , useAlternateScreenBufferCode, useNormalScreenBufferCode
-
-    -- * Reporting background or foreground colors
-  , reportLayerColorCode
-
-    -- * Select Graphic Rendition mode: colors and other whizzy stuff
-  , setSGRCode
-
-    -- * Cursor visibilty changes
-  , hideCursorCode, showCursorCode
-
-    -- * Hyperlinks
-    --
-    -- | Some, but not all, terminals support hyperlinks - that is, clickable
-    -- text that points to a URI.
-  , hyperlinkCode, hyperlinkWithIdCode, hyperlinkWithParamsCode
-
-    -- * Changing the title
-  , setTitleCode
-
-    -- * Utilities
-  , colorToCode
-  , Parameter
-  , SubParam
-  , ParamWithSubs
-  , csi
-  , csi'
-  , osc
-  , sgrToCode
-  , sgrToCode'
-  ) where
-
-import Data.Char (isPrint)
-import Data.List (intercalate)
-
-import Data.Colour.SRGB (toSRGB24, RGB (..))
-
-import System.Console.ANSI.Types
-
--- | Type synonym representing parameter values (without parameter substrings).
--- To represent a paramater value followed by a parameter substring, see
--- 'ParamWithSubs'.
---
--- @since 1.1
-type Parameter = Int
-
--- | Type synonym representing parameter elements of a parameter
--- substring. An empty parameter element (which represents a default value for
--- the parameter element) has value 'Nothing'.
---
--- @since 1.1
-type SubParam = Maybe Int
-
--- | Type synonym representing parameter values optionally followed by a
--- parameter substring. Parameter substrings were introduced by 13.1.8 of T.416
--- (03/93) for SGR parameter values 38 and 48 and have subsequently been adapted
--- for other uses.
---
--- @since 1.1
-type ParamWithSubs = (Parameter, [SubParam])
-
--- | 'csi' @parameters controlFunction@, where @parameters@ is a list of 'Int',
--- returns the control sequence comprising the control function CONTROL
--- SEQUENCE INTRODUCER (CSI) followed by the parameter(s) (separated by \'@;@\')
--- and ending with the @controlFunction@ character(s) that identifies the
--- control function. See 'csi'' for a function that handles parameter values
--- that may be followed by a parameter substring.
-csi ::
-     [Parameter]  -- ^ List of parameters for the control sequence.
-  -> String -- ^ Character(s) that identify the control function.
-  -> String
-csi = renderCsi show
-
--- | Like 'csi' but extended to parameters that may be followed by a parameter
--- substring. The parameter elements of a parameter substring are separated from
--- the parameter value and each other by \'@:@\'.
---
--- @since 1.1
-csi' ::
-     [ParamWithSubs]
-     -- ^ List of parameters (each of which may be followed by a parameter
-     -- substring).
-  -> String -- ^ Characters(s) that identify the control function.
-  -> String
-csi' = renderCsi render
- where
-  render (p, []) = show p
-  render (p, pes) = intercalate ":" (show p : map (maybe [] show) pes)
-
--- | Helper function to render different types of parameters.
-renderCsi :: (a -> String) -> [a] -> String -> String
-renderCsi render args code =
-  "\ESC[" ++ intercalate ";" (map render args) ++ code
-
--- | 'osc' @parameterS parametersT@, where @parameterS@ specifies the type of
--- operation to perform and @parametersT@ is the other parameter(s) (if any),
--- returns the control sequence comprising the control function OPERATING SYSTEM
--- COMMAND (OSC) followed by the parameters (separated by \';\') and ending with
--- the STRING TERMINATOR (ST) @\"\\ESC\\\\\"@.
---
--- @since 0.11.4
-osc ::
-     String -- ^ Ps parameter
-  -> String -- ^ Pt parameter(s)
-  -> String
-osc pS pT = "\ESC]" ++ pS ++ ";" ++ pT ++ "\ESC\\"
-
--- | 'colorToCode' @color@ returns the 0-based index of the color (one of the
--- eight colors in the ANSI standard).
-colorToCode :: Color -> Int
-colorToCode color = case color of
-  Black   -> 0
-  Red     -> 1
-  Green   -> 2
-  Yellow  -> 3
-  Blue    -> 4
-  Magenta -> 5
-  Cyan    -> 6
-  White   -> 7
-
--- | 'sgrToCode' @sgr@ returns the parameter of the SELECT GRAPHIC RENDITION
--- (SGR) aspect identified by @sgr@. If the parameter is followed by a parameter
--- substring returns an empty list. See 'sgrToCode'' for a function that handles
--- also parameter values that are followed by a parameter substring.
-sgrToCode ::
-     SGR -- ^ The SGR aspect
-  -> [Parameter]
-sgrToCode sgr = case sgrToCode' sgr of
-  Right args -> args
-  Left _ -> []
-
--- | 'sgrToCode'' @sgr@ returns the parameter of the SELECT GRAPHIC RENDITION
--- (SGR) aspect identified by @sgr@.
---
--- @since 1.1
-sgrToCode' ::
-     SGR -- ^ The SGR aspect
-  -> Either ParamWithSubs [Parameter]
-sgrToCode' sgr = case sgr of
-  Reset -> Right [0]
-  SetConsoleIntensity intensity -> case intensity of
-    BoldIntensity   -> Right [1]
-    FaintIntensity  -> Right [2]
-    NormalIntensity -> Right [22]
-  SetItalicized True  -> Right [3]
-  SetItalicized False -> Right [23]
-  SetUnderlining underlining -> case underlining of
-    SingleUnderline -> Right [4]
-    DoubleUnderline -> Right [21]
-    CurlyUnderline -> Left (4, [Just 3])
-    DottedUnderline -> Left (4, [Just 4])
-    DashedUnderline -> Left (4, [Just 5])
-    NoUnderline     -> Right [24]
-  SetBlinkSpeed blink_speed -> case blink_speed of
-    SlowBlink   -> Right [5]
-    RapidBlink  -> Right [6]
-    NoBlink     -> Right [25]
-  SetVisible False -> Right [8]
-  SetVisible True  -> Right [28]
-  SetSwapForegroundBackground True  -> Right [7]
-  SetSwapForegroundBackground False -> Right [27]
-  SetColor Foreground Dull color  -> Right [30 + colorToCode color]
-  SetColor Foreground Vivid color -> Right [90 + colorToCode color]
-  SetColor Background Dull color  -> Right [40 + colorToCode color]
-  SetColor Background Vivid color -> Right [100 + colorToCode color]
-  SetColor Underlining Dull color  -> Left (58, [Just 5, Just $ colorToCode color])
-  SetColor Underlining Vivid color -> Left (58, [Just 5, Just $ 8 + colorToCode color])
-  SetPaletteColor Foreground index -> Right [38, 5, fromIntegral index]
-  SetPaletteColor Background index -> Right [48, 5, fromIntegral index]
-  SetPaletteColor Underlining index -> Left (58, [Just 5, Just $ fromIntegral index])
-  SetRGBColor Foreground color -> Right $ [38, 2] ++ toRGB color
-  SetRGBColor Background color -> Right $ [48, 2] ++ toRGB color
-  SetRGBColor Underlining color -> Left (58, [Just 2, Nothing] ++ toRGB' color)
-  SetDefaultColor Foreground -> Right [39]
-  SetDefaultColor Background -> Right [49]
-  SetDefaultColor Underlining -> Right [59]
- where
-  toRGB color = let RGB r g b = toSRGB24 color
-                in  map fromIntegral [r, g, b]
-  toRGB' = map Just . toRGB
-
-cursorUpCode, cursorDownCode, cursorForwardCode, cursorBackwardCode ::
-     Int -- ^ Number of lines or characters to move
-  -> String
-cursorUpCode n = if n == 0 then "" else csi [n] "A"
-cursorDownCode n = if n == 0 then "" else csi [n] "B"
-cursorForwardCode n = if n == 0 then "" else csi [n] "C"
-cursorBackwardCode n = if n == 0 then "" else csi [n] "D"
-
-cursorDownLineCode, cursorUpLineCode ::
-     Int -- ^ Number of lines to move
-  -> String
-cursorDownLineCode n = if n == 0 then csi [1] "G" else csi [n] "E"
-cursorUpLineCode n = if n == 0 then csi [1] "G" else csi [n] "F"
-
--- | Code to move the cursor to the specified column. The column numbering is
--- 0-based (that is, the left-most column is numbered 0).
-setCursorColumnCode ::
-     Int -- ^ 0-based column to move to
-  -> String
-setCursorColumnCode n = csi [n + 1] "G"
-
--- | Code to move the cursor to the specified position (row and column). The
--- position is 0-based (that is, the top-left corner is at row 0 column 0).
-setCursorPositionCode ::
-     Int -- ^ 0-based row to move to
-  -> Int -- ^ 0-based column to move to
-  -> String
-setCursorPositionCode n m = csi [n + 1, m + 1] "H"
-
--- | @since 0.7.1
-saveCursorCode, restoreCursorCode :: String
-saveCursorCode = "\ESC7"
-restoreCursorCode = "\ESC8"
-
--- | Code to emit the cursor position into the console input stream, immediately
--- after being recognised on the output stream, as:
--- @ESC [ \<cursor row> ; \<cursor column> R@
---
--- Note that the information that is emitted is 1-based (the top-left corner is
--- at row 1 column 1) but 'setCursorPositionCode' is 0-based.
---
--- In isolation of 'System.Console.ANSI.getReportedCursorPosition' or
--- 'System.Console.ANSI.getCursorPosition', this function may be of limited use
--- on Windows operating systems because of difficulties in obtaining the data
--- emitted into the console input stream.
---
--- @since 0.7.1
-reportCursorPositionCode :: String
-reportCursorPositionCode = csi [] "6n"
-
--- | Code to emit the foreground or backgrond layer color into the console input
--- stream, immediately after being recognised on the output stream, as:
---
--- @ESC ] \<Ps> ; rgb: \<red> ; \<green> ; \<blue> \<ST>@
---
--- where @\<Ps>@ is @10@ for 'Foreground' and @11@ for 'Background'; @\<red>@,
--- @\<green>@ and @\<blue>@ are the color channel values in hexadecimal (4, 8,
--- 12 and 16 bit values are possible, although 16 bit values are most common);
--- and @\<ST>@ is the STRING TERMINATOR (ST). ST depends on the terminal
--- software and may be the @BEL@ character or @ESC \\@ characters.
---
--- This function may be of limited, or no, use on Windows operating systems
--- because (1) the control character sequence is not supported on native
--- terminals (2) of difficulties in obtaining the data emitted into the
--- console input stream. See 'System.Console.ANSI.getReportedLayerColor'.
---
--- Underlining is not supported.
---
--- @since 0.11.4
-reportLayerColorCode :: ConsoleLayer -> String
-reportLayerColorCode Foreground = osc "10" "?"
-reportLayerColorCode Background = osc "11" "?"
-reportLayerColorCode Underlining = [] -- Not supported.
-
-clearFromCursorToScreenEndCode, clearFromCursorToScreenBeginningCode,
-  clearScreenCode :: String
-clearFromCursorToLineEndCode, clearFromCursorToLineBeginningCode,
-  clearLineCode :: String
-
-clearFromCursorToScreenEndCode = csi [0] "J"
-clearFromCursorToScreenBeginningCode = csi [1] "J"
-clearScreenCode = csi [2] "J"
-clearFromCursorToLineEndCode = csi [0] "K"
-clearFromCursorToLineBeginningCode = csi [1] "K"
-clearLineCode = csi [2] "K"
-
-enableLineWrapCode, disableLineWrapCode :: String
-enableLineWrapCode = csi [] "?7h"
-disableLineWrapCode = csi [] "?7l"
-
-scrollPageUpCode, scrollPageDownCode ::
-     Int -- ^ Number of lines to scroll by
-  -> String
-scrollPageUpCode n = if n == 0 then "" else csi [n] "S"
-scrollPageDownCode n = if n == 0 then "" else csi [n] "T"
-
-useAlternateScreenBufferCode, useNormalScreenBufferCode :: String
-useAlternateScreenBufferCode = csi [] "?1049h"
-useNormalScreenBufferCode = csi [] "?1049l"
-
-setSGRCode ::
-     [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
-     -- @[Reset]@. Commands are applied left to right.
-  -> String
-setSGRCode sgrs = csi' (concatMap sgrToCode'' sgrs) "m"
- where
-  sgrToCode'' = either (:[]) (map (,[] :: [SubParam])) . sgrToCode'
-
-hideCursorCode, showCursorCode :: String
-hideCursorCode = csi [] "?25l"
-showCursorCode = csi [] "?25h"
-
--- | Code to introduce a hyperlink with (key, value) parameters. Some terminals
--- support an @id@ parameter key, so that hyperlinks with the same @id@ value
--- are treated as connected.
---
--- @since 0.11.3
-hyperlinkWithParamsCode ::
-     [(String, String)]
-     -- ^ Parameters
-  -> String
-     -- ^ URI
-  -> String
-     -- ^ Link text
-  -> String
-hyperlinkWithParamsCode params uri link =
-  osc "8" pT ++ link ++ osc "8" ";"
- where
-  pT = params' ++ ";" ++ uri
-  params' = intercalate ":" $ map (\(k, v) -> k ++ "=" ++ v) params
-
--- | Code to introduce a hyperlink.
---
--- @since 0.11.3
-hyperlinkCode ::
-     String
-     -- ^ URI
-  -> String
-     -- ^ Link text
-  -> String
-hyperlinkCode = hyperlinkWithParamsCode []
-
--- | Code to introduce a hyperlink with an identifier for the link. Some
--- terminals support an identifier, so that hyperlinks with the same identifier
--- are treated as connected.
---
--- @since 0.11.3
-hyperlinkWithIdCode ::
-     String
-     -- ^ Identifier for the link
-  -> String
-     -- ^ URI
-  -> String
-     -- ^ Link text
-  -> String
-hyperlinkWithIdCode linkId = hyperlinkWithParamsCode [("id", linkId)]
-
--- | Code to set the terminal window title and the icon name (that is, the text
--- for the window in the Start bar, or similar).
-
--- 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. This is chosen for consistent
--- behaviour between Unixes and Windows.
-setTitleCode ::
-     String
-     -- ^ New window title and icon name
-  -> String
-setTitleCode title = osc "0" (filter isPrint title)