summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathanDaugherty <>2021-02-23 01:40:00 (GMT)
committerhdiff <hdiff@hdiff.luite.com>2021-02-23 01:40:00 (GMT)
commit52ef4acb4f4d0c35c18c7ee3018841ed48e58e62 (patch)
treef25a4a8d66eb04ee5f327af2044815453639e9c3
parente0458599932bde500fd35be77141c73453fff29c (diff)
version 5.33HEAD5.33master
-rw-r--r--CHANGELOG.md16
-rw-r--r--src/Codec/Binary/UTF8/Debug.hs3
-rw-r--r--src/Data/Terminfo/Eval.hs6
-rw-r--r--src/Data/Terminfo/Parse.hs17
-rw-r--r--src/Graphics/Vty.hs4
-rw-r--r--src/Graphics/Vty/Attributes.hs13
-rw-r--r--src/Graphics/Vty/Attributes/Color240.hs228
-rw-r--r--src/Graphics/Vty/Image.hs1
-rw-r--r--src/Graphics/Vty/Image/Internal.hs2
-rw-r--r--src/Graphics/Vty/Inline.hs6
-rw-r--r--src/Graphics/Vty/Input/Classify.hs8
-rw-r--r--src/Graphics/Vty/Input/Classify/Types.hs2
-rw-r--r--src/Graphics/Vty/Input/Loop.hs4
-rw-r--r--src/Graphics/Vty/Input/Terminfo.hs2
-rw-r--r--src/Graphics/Vty/Input/Terminfo/ANSIVT.hs2
-rw-r--r--src/Graphics/Vty/Output.hs2
-rw-r--r--src/Graphics/Vty/Output/Interface.hs7
-rw-r--r--src/Graphics/Vty/Output/TerminfoBased.hs9
-rw-r--r--src/Graphics/Vty/Picture.hs9
-rw-r--r--src/Graphics/Vty/PictureToSpans.hs6
-rw-r--r--src/Graphics/Vty/Span.hs6
-rw-r--r--test/VerifyColor240.hs269
-rw-r--r--vty.cabal63
23 files changed, 391 insertions, 294 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e06e831..ce33b67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,20 @@
+5.33
+----
+
+API changes:
+* The `Cursor` type got a new `PositionOnly` constructor for cursor
+ placement without visibility.
+
+Package changes:
+* Relaxed upper bound for `random`
+* Updated `microlens` bounds to allow 0.4.12
+
+Other improvements:
+* Various hlint-driven improvements (thanks Willem Van Onsem)
+* The implementation of `color240` was improved (thanks (Willem Van
+ Onsem)
+
5.32
----
diff --git a/src/Codec/Binary/UTF8/Debug.hs b/src/Codec/Binary/UTF8/Debug.hs
index b3806a7..f35060f 100644
--- a/src/Codec/Binary/UTF8/Debug.hs
+++ b/src/Codec/Binary/UTF8/Debug.hs
@@ -14,5 +14,4 @@ utf8FromIso :: [Int] -> [Word8]
utf8FromIso = encode . map toEnum
ppUtf8 :: [Int] -> IO ()
-ppUtf8 = print . map (\f -> f "") . map showHex . utf8FromIso
-
+ppUtf8 = print . map (`showHex` "") . utf8FromIso
diff --git a/src/Data/Terminfo/Eval.hs b/src/Data/Terminfo/Eval.hs
index 9cbf095..86b10d8 100644
--- a/src/Data/Terminfo/Eval.hs
+++ b/src/Data/Terminfo/Eval.hs
@@ -42,7 +42,7 @@ pop = do
readParam :: Word -> Eval CapParam
readParam pn = do
- !params <- get >>= return . evalParams
+ !params <- evalParams <$> get
return $! genericIndex params pn
push :: CapParam -> Eval ()
@@ -64,11 +64,11 @@ writeCapExpr cap params =
in snd $ runWriter (runStateT (writeCapOps (capOps cap)) s0)
writeCapOps :: CapOps -> Eval ()
-writeCapOps ops = mapM_ writeCapOp ops
+writeCapOps = mapM_ writeCapOp
writeCapOp :: CapOp -> Eval ()
writeCapOp (Bytes !offset !count) = do
- !cap <- get >>= return . evalExpression
+ !cap <- evalExpression <$> get
let bytes = Vector.take count $ Vector.drop offset (capBytes cap)
Vector.forM_ bytes $ tell.writeWord8
writeCapOp DecOut = do
diff --git a/src/Data/Terminfo/Parse.hs b/src/Data/Terminfo/Parse.hs
index d2be1c5..7c10504 100644
--- a/src/Data/Terminfo/Parse.hs
+++ b/src/Data/Terminfo/Parse.hs
@@ -2,7 +2,6 @@
{-# LANGUAGE CPP #-}
{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE NamedFieldPuns #-}
{-# OPTIONS_GHC -funbox-strict-fields -O #-}
module Data.Terminfo.Parse
@@ -39,7 +38,7 @@ instance Show CapExpression where
++ " <= " ++ show (sourceString c)
where
hexDump :: [Word8] -> String
- hexDump = foldr (\b s -> showHex b s) ""
+ hexDump = foldr showHex ""
instance NFData CapExpression where
rnf (CapExpression ops !_bytes !str !c !pOps)
@@ -99,7 +98,7 @@ parseCapExpression capString =
Left e -> Left e
Right buildResults -> Right $ constructCapExpression capString buildResults
-constructCapExpression :: [Char] -> BuildResults -> CapExpression
+constructCapExpression :: String -> BuildResults -> CapExpression
constructCapExpression capString buildResults =
let expr = CapExpression
{ capOps = outCapOps buildResults
@@ -128,7 +127,7 @@ paramEscapeParser = do
literalPercentParser :: CapParser BuildResults
literalPercentParser = do
_ <- char '%'
- startOffset <- getState >>= return . nextOffset
+ startOffset <- nextOffset <$> getState
incOffset 1
return $ BuildResults 0 [Bytes startOffset 1] []
@@ -154,7 +153,7 @@ incrementOpParser = do
pushOpParser :: CapParser BuildResults
pushOpParser = do
_ <- char 'p'
- paramN <- digit >>= return . (\d -> read [d])
+ paramN <- read . pure <$> digit
incOffset 2
return $ BuildResults (fromEnum paramN) [PushParam $ paramN - 1] []
@@ -299,7 +298,7 @@ compareOpParser
bytesOpParser :: CapParser BuildResults
bytesOpParser = do
bytes <- many1 $ satisfy (/= '%')
- startOffset <- getState >>= return . nextOffset
+ startOffset <- nextOffset <$> getState
let !c = length bytes
!s <- getState
let s' = s { nextOffset = startOffset + c }
@@ -336,9 +335,9 @@ data BuildResults = BuildResults
instance Semigroup BuildResults where
v0 <> v1
= BuildResults
- { outParamCount = (outParamCount v0) `max` (outParamCount v1)
- , outCapOps = (outCapOps v0) <> (outCapOps v1)
- , outParamOps = (outParamOps v0) <> (outParamOps v1)
+ { outParamCount = outParamCount v0 `max` outParamCount v1
+ , outCapOps = outCapOps v0 <> outCapOps v1
+ , outParamOps = outParamOps v0 <> outParamOps v1
}
instance Monoid BuildResults where
diff --git a/src/Graphics/Vty.hs b/src/Graphics/Vty.hs
index 923eae1..03d4264 100644
--- a/src/Graphics/Vty.hs
+++ b/src/Graphics/Vty.hs
@@ -166,7 +166,7 @@ internalMkVty :: Input -> Output -> IO Vty
internalMkVty input out = do
reserveDisplay out
- shutdownVar <- atomically $ newTVar False
+ shutdownVar <- newTVarIO False
let shutdownIo = do
alreadyShutdown <- atomically $ swapTVar shutdownVar True
when (not alreadyShutdown) $ do
@@ -174,7 +174,7 @@ internalMkVty input out = do
releaseDisplay out
releaseTerminal out
- let shutdownStatus = atomically $ readTVar shutdownVar
+ let shutdownStatus = readTVarIO shutdownVar
lastPicRef <- newIORef Nothing
lastUpdateRef <- newIORef Nothing
diff --git a/src/Graphics/Vty/Attributes.hs b/src/Graphics/Vty/Attributes.hs
index c818ad2..929f8aa 100644
--- a/src/Graphics/Vty/Attributes.hs
+++ b/src/Graphics/Vty/Attributes.hs
@@ -1,7 +1,4 @@
{-# LANGUAGE CPP #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
@@ -146,20 +143,14 @@ data FixedAttr = FixedAttr
-- | The style and color attributes can either be the terminal defaults.
-- Or be equivalent to the previously applied style. Or be a specific
-- value.
-data MaybeDefault v where
- Default :: MaybeDefault v
- KeepCurrent :: MaybeDefault v
- SetTo :: forall v . ( Eq v, Show v, Read v ) => !v -> MaybeDefault v
+data MaybeDefault v = Default | KeepCurrent | SetTo !v
+ deriving (Eq, Read, Show)
instance (NFData v) => NFData (MaybeDefault v) where
rnf Default = ()
rnf KeepCurrent = ()
rnf (SetTo v) = rnf v
-deriving instance Eq v => Eq (MaybeDefault v)
-deriving instance Eq v => Show (MaybeDefault v)
-deriving instance (Eq v, Show v, Read v) => Read (MaybeDefault v)
-
instance Eq v => Semigroup (MaybeDefault v) where
Default <> Default = Default
Default <> KeepCurrent = Default
diff --git a/src/Graphics/Vty/Attributes/Color240.hs b/src/Graphics/Vty/Attributes/Color240.hs
index 30b36d7..8c32ff5 100644
--- a/src/Graphics/Vty/Attributes/Color240.hs
+++ b/src/Graphics/Vty/Attributes/Color240.hs
@@ -39,226 +39,18 @@ rgbColorToColor240 r g b
| r == 218 && g == 218 && b == 218 = 237
| r == 228 && g == 228 && b == 228 = 238
| r == 238 && g == 238 && b == 238 = 239
- | r <= 0 && g <= 0 && b <= 0 = 0
- | r <= 0 && g <= 0 && b <= 95 = 1
- | r <= 0 && g <= 0 && b <= 135 = 2
- | r <= 0 && g <= 0 && b <= 175 = 3
- | r <= 0 && g <= 0 && b <= 215 = 4
- | r <= 0 && g <= 0 && b <= 255 = 5
- | r <= 0 && g <= 95 && b <= 0 = 6
- | r <= 0 && g <= 95 && b <= 95 = 7
- | r <= 0 && g <= 95 && b <= 135 = 8
- | r <= 0 && g <= 95 && b <= 175 = 9
- | r <= 0 && g <= 95 && b <= 215 = 10
- | r <= 0 && g <= 95 && b <= 255 = 11
- | r <= 0 && g <= 135 && b <= 0 = 12
- | r <= 0 && g <= 135 && b <= 95 = 13
- | r <= 0 && g <= 135 && b <= 135 = 14
- | r <= 0 && g <= 135 && b <= 175 = 15
- | r <= 0 && g <= 135 && b <= 215 = 16
- | r <= 0 && g <= 135 && b <= 255 = 17
- | r <= 0 && g <= 175 && b <= 0 = 18
- | r <= 0 && g <= 175 && b <= 95 = 19
- | r <= 0 && g <= 175 && b <= 135 = 20
- | r <= 0 && g <= 175 && b <= 175 = 21
- | r <= 0 && g <= 175 && b <= 215 = 22
- | r <= 0 && g <= 175 && b <= 255 = 23
- | r <= 0 && g <= 215 && b <= 0 = 24
- | r <= 0 && g <= 215 && b <= 95 = 25
- | r <= 0 && g <= 215 && b <= 135 = 26
- | r <= 0 && g <= 215 && b <= 175 = 27
- | r <= 0 && g <= 215 && b <= 215 = 28
- | r <= 0 && g <= 215 && b <= 255 = 29
- | r <= 0 && g <= 255 && b <= 0 = 30
- | r <= 0 && g <= 255 && b <= 95 = 31
- | r <= 0 && g <= 255 && b <= 135 = 32
- | r <= 0 && g <= 255 && b <= 175 = 33
- | r <= 0 && g <= 255 && b <= 215 = 34
- | r <= 0 && g <= 255 && b <= 255 = 35
- | r <= 95 && g <= 0 && b <= 0 = 36
- | r <= 95 && g <= 0 && b <= 95 = 37
- | r <= 95 && g <= 0 && b <= 135 = 38
- | r <= 95 && g <= 0 && b <= 175 = 39
- | r <= 95 && g <= 0 && b <= 215 = 40
- | r <= 95 && g <= 0 && b <= 255 = 41
- | r <= 95 && g <= 95 && b <= 0 = 42
- | r <= 95 && g <= 95 && b <= 95 = 43
- | r <= 95 && g <= 95 && b <= 135 = 44
- | r <= 95 && g <= 95 && b <= 175 = 45
- | r <= 95 && g <= 95 && b <= 215 = 46
- | r <= 95 && g <= 95 && b <= 255 = 47
- | r <= 95 && g <= 135 && b <= 0 = 48
- | r <= 95 && g <= 135 && b <= 95 = 49
- | r <= 95 && g <= 135 && b <= 135 = 50
- | r <= 95 && g <= 135 && b <= 175 = 51
- | r <= 95 && g <= 135 && b <= 215 = 52
- | r <= 95 && g <= 135 && b <= 255 = 53
- | r <= 95 && g <= 175 && b <= 0 = 54
- | r <= 95 && g <= 175 && b <= 95 = 55
- | r <= 95 && g <= 175 && b <= 135 = 56
- | r <= 95 && g <= 175 && b <= 175 = 57
- | r <= 95 && g <= 175 && b <= 215 = 58
- | r <= 95 && g <= 175 && b <= 255 = 59
- | r <= 95 && g <= 215 && b <= 0 = 60
- | r <= 95 && g <= 215 && b <= 95 = 61
- | r <= 95 && g <= 215 && b <= 135 = 62
- | r <= 95 && g <= 215 && b <= 175 = 63
- | r <= 95 && g <= 215 && b <= 215 = 64
- | r <= 95 && g <= 215 && b <= 255 = 65
- | r <= 95 && g <= 255 && b <= 0 = 66
- | r <= 95 && g <= 255 && b <= 95 = 67
- | r <= 95 && g <= 255 && b <= 135 = 68
- | r <= 95 && g <= 255 && b <= 175 = 69
- | r <= 95 && g <= 255 && b <= 215 = 70
- | r <= 95 && g <= 255 && b <= 255 = 71
- | r <= 135 && g <= 0 && b <= 0 = 72
- | r <= 135 && g <= 0 && b <= 95 = 73
- | r <= 135 && g <= 0 && b <= 135 = 74
- | r <= 135 && g <= 0 && b <= 175 = 75
- | r <= 135 && g <= 0 && b <= 215 = 76
- | r <= 135 && g <= 0 && b <= 255 = 77
- | r <= 135 && g <= 95 && b <= 0 = 78
- | r <= 135 && g <= 95 && b <= 95 = 79
- | r <= 135 && g <= 95 && b <= 135 = 80
- | r <= 135 && g <= 95 && b <= 175 = 81
- | r <= 135 && g <= 95 && b <= 215 = 82
- | r <= 135 && g <= 95 && b <= 255 = 83
- | r <= 135 && g <= 135 && b <= 0 = 84
- | r <= 135 && g <= 135 && b <= 95 = 85
- | r <= 135 && g <= 135 && b <= 135 = 86
- | r <= 135 && g <= 135 && b <= 175 = 87
- | r <= 135 && g <= 135 && b <= 215 = 88
- | r <= 135 && g <= 135 && b <= 255 = 89
- | r <= 135 && g <= 175 && b <= 0 = 90
- | r <= 135 && g <= 175 && b <= 95 = 91
- | r <= 135 && g <= 175 && b <= 135 = 92
- | r <= 135 && g <= 175 && b <= 175 = 93
- | r <= 135 && g <= 175 && b <= 215 = 94
- | r <= 135 && g <= 175 && b <= 255 = 95
- | r <= 135 && g <= 215 && b <= 0 = 96
- | r <= 135 && g <= 215 && b <= 95 = 97
- | r <= 135 && g <= 215 && b <= 135 = 98
- | r <= 135 && g <= 215 && b <= 175 = 99
- | r <= 135 && g <= 215 && b <= 215 = 100
- | r <= 135 && g <= 215 && b <= 255 = 101
- | r <= 135 && g <= 255 && b <= 0 = 102
- | r <= 135 && g <= 255 && b <= 95 = 103
- | r <= 135 && g <= 255 && b <= 135 = 104
- | r <= 135 && g <= 255 && b <= 175 = 105
- | r <= 135 && g <= 255 && b <= 215 = 106
- | r <= 135 && g <= 255 && b <= 255 = 107
- | r <= 175 && g <= 0 && b <= 0 = 108
- | r <= 175 && g <= 0 && b <= 95 = 109
- | r <= 175 && g <= 0 && b <= 135 = 110
- | r <= 175 && g <= 0 && b <= 175 = 111
- | r <= 175 && g <= 0 && b <= 215 = 112
- | r <= 175 && g <= 0 && b <= 255 = 113
- | r <= 175 && g <= 95 && b <= 0 = 114
- | r <= 175 && g <= 95 && b <= 95 = 115
- | r <= 175 && g <= 95 && b <= 135 = 116
- | r <= 175 && g <= 95 && b <= 175 = 117
- | r <= 175 && g <= 95 && b <= 215 = 118
- | r <= 175 && g <= 95 && b <= 255 = 119
- | r <= 175 && g <= 135 && b <= 0 = 120
- | r <= 175 && g <= 135 && b <= 95 = 121
- | r <= 175 && g <= 135 && b <= 135 = 122
- | r <= 175 && g <= 135 && b <= 175 = 123
- | r <= 175 && g <= 135 && b <= 215 = 124
- | r <= 175 && g <= 135 && b <= 255 = 125
- | r <= 175 && g <= 175 && b <= 0 = 126
- | r <= 175 && g <= 175 && b <= 95 = 127
- | r <= 175 && g <= 175 && b <= 135 = 128
- | r <= 175 && g <= 175 && b <= 175 = 129
- | r <= 175 && g <= 175 && b <= 215 = 130
- | r <= 175 && g <= 175 && b <= 255 = 131
- | r <= 175 && g <= 215 && b <= 0 = 132
- | r <= 175 && g <= 215 && b <= 95 = 133
- | r <= 175 && g <= 215 && b <= 135 = 134
- | r <= 175 && g <= 215 && b <= 175 = 135
- | r <= 175 && g <= 215 && b <= 215 = 136
- | r <= 175 && g <= 215 && b <= 255 = 137
- | r <= 175 && g <= 255 && b <= 0 = 138
- | r <= 175 && g <= 255 && b <= 95 = 139
- | r <= 175 && g <= 255 && b <= 135 = 140
- | r <= 175 && g <= 255 && b <= 175 = 141
- | r <= 175 && g <= 255 && b <= 215 = 142
- | r <= 175 && g <= 255 && b <= 255 = 143
- | r <= 215 && g <= 0 && b <= 0 = 144
- | r <= 215 && g <= 0 && b <= 95 = 145
- | r <= 215 && g <= 0 && b <= 135 = 146
- | r <= 215 && g <= 0 && b <= 175 = 147
- | r <= 215 && g <= 0 && b <= 215 = 148
- | r <= 215 && g <= 0 && b <= 255 = 149
- | r <= 215 && g <= 95 && b <= 0 = 150
- | r <= 215 && g <= 95 && b <= 95 = 151
- | r <= 215 && g <= 95 && b <= 135 = 152
- | r <= 215 && g <= 95 && b <= 175 = 153
- | r <= 215 && g <= 95 && b <= 215 = 154
- | r <= 215 && g <= 95 && b <= 255 = 155
- | r <= 215 && g <= 135 && b <= 0 = 156
- | r <= 215 && g <= 135 && b <= 95 = 157
- | r <= 215 && g <= 135 && b <= 135 = 158
- | r <= 215 && g <= 135 && b <= 175 = 159
- | r <= 215 && g <= 135 && b <= 215 = 160
- | r <= 215 && g <= 135 && b <= 255 = 161
- | r <= 215 && g <= 175 && b <= 0 = 162
- | r <= 215 && g <= 175 && b <= 95 = 163
- | r <= 215 && g <= 175 && b <= 135 = 164
- | r <= 215 && g <= 175 && b <= 175 = 165
- | r <= 215 && g <= 175 && b <= 215 = 166
- | r <= 215 && g <= 175 && b <= 255 = 167
- | r <= 215 && g <= 215 && b <= 0 = 168
- | r <= 215 && g <= 215 && b <= 95 = 169
- | r <= 215 && g <= 215 && b <= 135 = 170
- | r <= 215 && g <= 215 && b <= 175 = 171
- | r <= 215 && g <= 215 && b <= 215 = 172
- | r <= 215 && g <= 215 && b <= 255 = 173
- | r <= 215 && g <= 255 && b <= 0 = 174
- | r <= 215 && g <= 255 && b <= 95 = 175
- | r <= 215 && g <= 255 && b <= 135 = 176
- | r <= 215 && g <= 255 && b <= 175 = 177
- | r <= 215 && g <= 255 && b <= 215 = 178
- | r <= 215 && g <= 255 && b <= 255 = 179
- | r <= 255 && g <= 0 && b <= 0 = 180
- | r <= 255 && g <= 0 && b <= 95 = 181
- | r <= 255 && g <= 0 && b <= 135 = 182
- | r <= 255 && g <= 0 && b <= 175 = 183
- | r <= 255 && g <= 0 && b <= 215 = 184
- | r <= 255 && g <= 0 && b <= 255 = 185
- | r <= 255 && g <= 95 && b <= 0 = 186
- | r <= 255 && g <= 95 && b <= 95 = 187
- | r <= 255 && g <= 95 && b <= 135 = 188
- | r <= 255 && g <= 95 && b <= 175 = 189
- | r <= 255 && g <= 95 && b <= 215 = 190
- | r <= 255 && g <= 95 && b <= 255 = 191
- | r <= 255 && g <= 135 && b <= 0 = 192
- | r <= 255 && g <= 135 && b <= 95 = 193
- | r <= 255 && g <= 135 && b <= 135 = 194
- | r <= 255 && g <= 135 && b <= 175 = 195
- | r <= 255 && g <= 135 && b <= 215 = 196
- | r <= 255 && g <= 135 && b <= 255 = 197
- | r <= 255 && g <= 175 && b <= 0 = 198
- | r <= 255 && g <= 175 && b <= 95 = 199
- | r <= 255 && g <= 175 && b <= 135 = 200
- | r <= 255 && g <= 175 && b <= 175 = 201
- | r <= 255 && g <= 175 && b <= 215 = 202
- | r <= 255 && g <= 175 && b <= 255 = 203
- | r <= 255 && g <= 215 && b <= 0 = 204
- | r <= 255 && g <= 215 && b <= 95 = 205
- | r <= 255 && g <= 215 && b <= 135 = 206
- | r <= 255 && g <= 215 && b <= 175 = 207
- | r <= 255 && g <= 215 && b <= 215 = 208
- | r <= 255 && g <= 215 && b <= 255 = 209
- | r <= 255 && g <= 255 && b <= 0 = 210
- | r <= 255 && g <= 255 && b <= 95 = 211
- | r <= 255 && g <= 255 && b <= 135 = 212
- | r <= 255 && g <= 255 && b <= 175 = 213
- | r <= 255 && g <= 255 && b <= 215 = 214
- | r <= 255 && g <= 255 && b <= 255 = 215
- | otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
+ | otherwise = 36 * go r + 6 * go g + go b
+ where go = simpleColor_ (error (printf "RGB color %d %d %d does not map to 240 palette."
(fromIntegral r :: Int)
(fromIntegral g :: Int)
- (fromIntegral b :: Int))
+ (fromIntegral b :: Int)))
+
+simpleColor_ :: Integral i => Word8 -> i -> Word8
+simpleColor_ e c
+ | c <= 0 = 0
+ | c <= 95 = 1
+ | c <= 255 = fromIntegral ((c-16) `div` 40)
+ | otherwise = e
-- | Create a RGB triple from a value in the Color240 set.
color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int)
diff --git a/src/Graphics/Vty/Image.hs b/src/Graphics/Vty/Image.hs
index f98b5f3..093b65d 100644
--- a/src/Graphics/Vty/Image.hs
+++ b/src/Graphics/Vty/Image.hs
@@ -1,5 +1,4 @@
-- Copyright 2009-2010 Corey O'Connor
-{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE DisambiguateRecordFields #-}
-- | A Vty program makes 'Picture's from 'Image's. This module provides
diff --git a/src/Graphics/Vty/Image/Internal.hs b/src/Graphics/Vty/Image/Internal.hs
index b1a4cbb..32a9c06 100644
--- a/src/Graphics/Vty/Image/Internal.hs
+++ b/src/Graphics/Vty/Image/Internal.hs
@@ -146,7 +146,7 @@ data Image =
-- | pretty print just the structure of an image.
ppImageStructure :: Image -> String
-ppImageStructure inImg = go 0 inImg
+ppImageStructure = go 0
where
go indent img = tab indent ++ pp indent img
tab indent = concat $ replicate indent " "
diff --git a/src/Graphics/Vty/Inline.hs b/src/Graphics/Vty/Inline.hs
index 04cbd6c..f869b10 100644
--- a/src/Graphics/Vty/Inline.hs
+++ b/src/Graphics/Vty/Inline.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE BangPatterns #-}
-
-- | The inline module provides a limited interface to changing the
-- style of terminal output. The intention is for this interface to be
-- used inline with other output systems.
@@ -85,8 +83,8 @@ removeStyle :: Style -> InlineM ()
removeStyle sMask = modify $ \s ->
s { inlineAttr =
let style' = case attrStyle (inlineAttr s) of
- Default -> error $ "Graphics.Vty.Inline: Cannot removeStyle if applyStyle never used."
- KeepCurrent -> error $ "Graphics.Vty.Inline: Cannot removeStyle if applyStyle never used."
+ Default -> error "Graphics.Vty.Inline: Cannot removeStyle if applyStyle never used."
+ KeepCurrent -> error "Graphics.Vty.Inline: Cannot removeStyle if applyStyle never used."
SetTo st -> st .&. complement sMask
in (inlineAttr s) { attrStyle = SetTo style' }
}
diff --git a/src/Graphics/Vty/Input/Classify.hs b/src/Graphics/Vty/Input/Classify.hs
index b498a45..f1fcfb9 100644
--- a/src/Graphics/Vty/Input/Classify.hs
+++ b/src/Graphics/Vty/Input/Classify.hs
@@ -24,10 +24,10 @@ import qualified Data.Set as S( fromList, member )
import Data.Char
import Data.Word
-compile :: ClassifyMap -> [Char] -> KClass
+compile :: ClassifyMap -> String -> KClass
compile table = cl' where
-- take all prefixes and create a set of these
- prefixSet = S.fromList $ concatMap (init . inits . fst) $ table
+ prefixSet = S.fromList $ concatMap (init . inits . fst) table
maxValidInputLength = maximum (map (length . fst) table)
eventForInput = M.fromList table
cl' [] = Prefix
@@ -51,7 +51,7 @@ compile table = cl' where
-- neither a prefix or a full event.
[] -> Invalid
-classify :: ClassifyMap -> [Char] -> KClass
+classify :: ClassifyMap -> String -> KClass
classify table =
let standardClassifier = compile table
in \s -> case s of
@@ -64,7 +64,7 @@ classify table =
c:cs | ord c >= 0xC2 -> classifyUtf8 c cs
_ -> standardClassifier s
-classifyUtf8 :: Char -> [Char] -> KClass
+classifyUtf8 :: Char -> String -> KClass
classifyUtf8 c cs =
let n = utf8Length (ord c)
(codepoint,rest) = splitAt n (c:cs)
diff --git a/src/Graphics/Vty/Input/Classify/Types.hs b/src/Graphics/Vty/Input/Classify/Types.hs
index 4e3ac1b..ab19a4a 100644
--- a/src/Graphics/Vty/Input/Classify/Types.hs
+++ b/src/Graphics/Vty/Input/Classify/Types.hs
@@ -8,7 +8,7 @@ where
import Graphics.Vty.Input.Events
data KClass
- = Valid Event [Char]
+ = Valid Event String
-- ^ A valid event was parsed. Any unused characters from the input
-- stream are also provided.
| Invalid
diff --git a/src/Graphics/Vty/Input/Loop.hs b/src/Graphics/Vty/Input/Loop.hs
index e106256..503c53e 100644
--- a/src/Graphics/Vty/Input/Loop.hs
+++ b/src/Graphics/Vty/Input/Loop.hs
@@ -137,7 +137,7 @@ readFromDevice = do
threadWaitRead fd
bytesRead <- fdReadBuf fd bufferPtr (fromIntegral maxBytes)
if bytesRead > 0
- then fmap (map $ chr . fromIntegral) $ peekArray (fromIntegral bytesRead) bufferPtr
+ then map (chr . fromIntegral) <$> peekArray (fromIntegral bytesRead) bufferPtr
else return []
when (not $ null stringRep) $ logMsg $ "input bytes: " ++ show stringRep
return stringRep
@@ -224,7 +224,7 @@ logInitialInputState input classifyTable = case _inputDebug input of
Just h -> do
Config{ vmin = Just theVmin
, vtime = Just theVtime
- , termName = Just theTerm, .. } <- readIORef $ _configRef input
+ , termName = Just theTerm } <- readIORef $ _configRef input
_ <- hPrintf h "initial (vmin,vtime): %s\n" (show (theVmin, theVtime))
forM_ classifyTable $ \i -> case i of
(inBytes, EvKey k mods) -> hPrintf h "map %s %s %s %s\n" (show theTerm)
diff --git a/src/Graphics/Vty/Input/Terminfo.hs b/src/Graphics/Vty/Input/Terminfo.hs
index 50e4e57..26cd022 100644
--- a/src/Graphics/Vty/Input/Terminfo.hs
+++ b/src/Graphics/Vty/Input/Terminfo.hs
@@ -74,7 +74,7 @@ visibleChars = [ ([x], EvKey (KChar x) [])
ctrlChars :: ClassifyMap
ctrlChars =
[ ([toEnum x],EvKey (KChar y) [MCtrl])
- | (x,y) <- zip ([0..31]) ('@':['a'..'z']++['['..'_'])
+ | (x,y) <- zip [0..31] ('@':['a'..'z']++['['..'_'])
, y /= 'i' -- Resolve issue #3 where CTRL-i hides TAB.
, y /= 'h' -- CTRL-h should not hide BS
]
diff --git a/src/Graphics/Vty/Input/Terminfo/ANSIVT.hs b/src/Graphics/Vty/Input/Terminfo/ANSIVT.hs
index b6b1179..1ad11b8 100644
--- a/src/Graphics/Vty/Input/Terminfo/ANSIVT.hs
+++ b/src/Graphics/Vty/Input/Terminfo/ANSIVT.hs
@@ -59,7 +59,7 @@ navKeys3 =
-- This encoding depends on the terminal.
functionKeys1 :: ClassifyMap
functionKeys1 =
- let f ff nrs m = [ ("\ESC["++show n++"~",EvKey (KFun $ n-(nrs!!0)+ff) m) | n <- nrs ] in
+ let f ff nrs m = [ ("\ESC["++show n++"~",EvKey (KFun $ n-head nrs+ff) m) | n <- nrs ] in
concat [f 1 [25,26] [MShift], f 3 [28,29] [MShift], f 5 [31..34] [MShift] ]
-- | encoding for meta plus char
diff --git a/src/Graphics/Vty/Output.hs b/src/Graphics/Vty/Output.hs
index 2d9e534..0f9bd60 100644
--- a/src/Graphics/Vty/Output.hs
+++ b/src/Graphics/Vty/Output.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE RecordWildCards, NamedFieldPuns, CPP #-}
+{-# LANGUAGE RecordWildCards, CPP #-}
-- | This module provides functions for accessing the current terminal
-- or a specific terminal device.
--
diff --git a/src/Graphics/Vty/Output/Interface.hs b/src/Graphics/Vty/Output/Interface.hs
index b3cd117..4ba830b 100644
--- a/src/Graphics/Vty/Output/Interface.hs
+++ b/src/Graphics/Vty/Output/Interface.hs
@@ -1,5 +1,4 @@
-- Copyright Corey O'Connor
-{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE GADTs #-}
@@ -207,6 +206,12 @@ outputPicture dc pic = do
AbsoluteCursor x y ->
writeShowCursor dc `mappend`
writeMoveCursor dc (clampX x) (clampY y)
+ PositionOnly isAbs x y ->
+ if isAbs
+ then writeMoveCursor dc (clampX x) (clampY y)
+ else let (ox, oy) = charToOutputPos m (clampX x, clampY y)
+ m = cursorOutputMap ops $ picCursor pic
+ in writeMoveCursor dc (clampX ox) (clampY oy)
Cursor x y ->
let m = cursorOutputMap ops $ picCursor pic
(ox, oy) = charToOutputPos m (clampX x, clampY y)
diff --git a/src/Graphics/Vty/Output/TerminfoBased.hs b/src/Graphics/Vty/Output/TerminfoBased.hs
index 03faa2c..38b6fb3 100644
--- a/src/Graphics/Vty/Output/TerminfoBased.hs
+++ b/src/Graphics/Vty/Output/TerminfoBased.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}
@@ -15,7 +14,7 @@ module Graphics.Vty.Output.TerminfoBased
where
import Control.Monad (when)
-import Data.Bits (shiftL)
+import Data.Bits (shiftL, (.&.))
import qualified Data.ByteString as BS
import Data.ByteString.Internal (toForeignPtr)
import Data.Terminfo.Parse
@@ -28,7 +27,6 @@ import Graphics.Vty.Output.Interface
import Blaze.ByteString.Builder (Write, writeToByteString, writeStorable)
-import Data.Bits ((.&.))
import Data.IORef
import Data.Maybe (isJust, isNothing, fromJust)
import Data.Word
@@ -209,7 +207,7 @@ reserveTerminal termName outFd = do
, assumedStateRef = newAssumedStateRef
-- I think fix would help assure tActual is the only
-- reference. I was having issues tho.
- , mkDisplayContext = \tActual -> terminfoDisplayContext tActual terminfoCaps
+ , mkDisplayContext = (`terminfoDisplayContext` terminfoCaps)
}
sendCap s = sendCapToTerminal t (s terminfoCaps)
maybeSendCap s = when (isJust $ s terminfoCaps) . sendCap (fromJust . s)
@@ -355,8 +353,7 @@ terminfoWriteSetAttr dc terminfoCaps urlsEnabled prevAttr reqAttr diffs =
setColors
-- implicitly resets the colors to the defaults
SetState state -> writeCapExpr (fromJust $ setAttrStates
- $ displayAttrCaps
- $ terminfoCaps
+ $ displayAttrCaps terminfoCaps
)
(sgrArgsForState state)
`mappend` setItalics
diff --git a/src/Graphics/Vty/Picture.hs b/src/Graphics/Vty/Picture.hs
index f872929..e3cd043 100644
--- a/src/Graphics/Vty/Picture.hs
+++ b/src/Graphics/Vty/Picture.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE BangPatterns #-}
-- A 'Picture' is a background paired with a set of 'Image' layers. The
-- 'Picture' data structure is representative of the final terminal
-- view.
@@ -82,6 +81,14 @@ data Cursor =
NoCursor
-- | Show the cursor at the given logical column accounting for
-- character width in the presence of multi-column characters.
+ | PositionOnly !Bool !Int !Int
+ -- | Set the terminal's cursor position without displaying a cursor
+ -- character. This is important for accessibility with screen
+ -- readers where a cursor position needs to be reported but we may
+ -- not want to show a block cursor in that location for cosmetic
+ -- reasons. The boolean argument indicates whether the positioning
+ -- should be absolute as with 'AbsoluteCursor' ('True') or logical
+ -- as with 'Cursor' ('False').
| Cursor !Int !Int
-- | Show the cursor at the given absolute terminal column and row
| AbsoluteCursor !Int !Int
diff --git a/src/Graphics/Vty/PictureToSpans.hs b/src/Graphics/Vty/PictureToSpans.hs
index 17a6f87..91e7a83 100644
--- a/src/Graphics/Vty/PictureToSpans.hs
+++ b/src/Graphics/Vty/PictureToSpans.hs
@@ -81,7 +81,7 @@ combinedOpsForLayers :: Picture -> DisplayRegion -> ST s (MRowOps s)
combinedOpsForLayers pic r
| regionWidth r == 0 || regionHeight r == 0 = MVector.new 0
| otherwise = do
- layerOps <- mapM (\layer -> buildSpans layer r) (picLayers pic)
+ layerOps <- mapM (`buildSpans` r) (picLayers pic)
case layerOps of
[] -> fail "empty picture"
[ops] -> substituteSkips (picBackground pic) ops
@@ -136,8 +136,8 @@ mergeUnder upper lower = do
return upper
mergeRowUnder :: SpanOps -> SpanOps -> SpanOps
-mergeRowUnder upperRowOps lowerRowOps =
- onUpperOp Vector.empty (Vector.head upperRowOps) (Vector.tail upperRowOps) lowerRowOps
+mergeRowUnder upperRowOps =
+ onUpperOp Vector.empty (Vector.head upperRowOps) (Vector.tail upperRowOps)
where
-- H: it will never be the case that we are out of upper ops
-- before lower ops.
diff --git a/src/Graphics/Vty/Span.hs b/src/Graphics/Vty/Span.hs
index 64b480f..065776f 100644
--- a/src/Graphics/Vty/Span.hs
+++ b/src/Graphics/Vty/Span.hs
@@ -1,6 +1,4 @@
-- Copyright Corey O'Connor
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE GADTs #-}
-- | A picture is translated into a sequences of state changes and
-- character spans. The attribute is applied to all following spans,
@@ -52,7 +50,7 @@ dropOps :: Int -> SpanOps -> SpanOps
dropOps w = snd . splitOpsAt w
splitOpsAt :: Int -> SpanOps -> (SpanOps, SpanOps)
-splitOpsAt inW inOps = splitOpsAt' inW inOps
+splitOpsAt = splitOpsAt'
where
splitOpsAt' 0 ops = (Vector.empty, ops)
splitOpsAt' remainingColumns ops = case Vector.head ops of
@@ -103,7 +101,7 @@ displayOpsColumns ops
-- | The number of rows the DisplayOps are defined for.
displayOpsRows :: DisplayOps -> Int
-displayOpsRows ops = Vector.length ops
+displayOpsRows = Vector.length
affectedRegion :: DisplayOps -> DisplayRegion
affectedRegion ops = (displayOpsColumns ops, displayOpsRows ops)
diff --git a/test/VerifyColor240.hs b/test/VerifyColor240.hs
new file mode 100644
index 0000000..2f6983c
--- /dev/null
+++ b/test/VerifyColor240.hs
@@ -0,0 +1,269 @@
+module VerifyColor240 where
+
+import Data.Word(Word8)
+import Verify
+
+import Graphics.Vty.Attributes.Color240(rgbColorToColor240)
+
+oldRgbColorToColor240 :: Integral i => i -> i -> i -> Word8
+oldRgbColorToColor240 r g b
+ | r < 0 && g < 0 && b < 0 = error "rgbColor with negative color component intensity"
+ | r == 8 && g == 8 && b == 8 = 216
+ | r == 18 && g == 18 && b == 18 = 217
+ | r == 28 && g == 28 && b == 28 = 218
+ | r == 38 && g == 38 && b == 38 = 219
+ | r == 48 && g == 48 && b == 48 = 220
+ | r == 58 && g == 58 && b == 58 = 221
+ | r == 68 && g == 68 && b == 68 = 222
+ | r == 78 && g == 78 && b == 78 = 223
+ | r == 88 && g == 88 && b == 88 = 224
+ | r == 98 && g == 98 && b == 98 = 225
+ | r == 108 && g == 108 && b == 108 = 226
+ | r == 118 && g == 118 && b == 118 = 227
+ | r == 128 && g == 128 && b == 128 = 228
+ | r == 138 && g == 138 && b == 138 = 229
+ | r == 148 && g == 148 && b == 148 = 230
+ | r == 158 && g == 158 && b == 158 = 231
+ | r == 168 && g == 168 && b == 168 = 232
+ | r == 178 && g == 178 && b == 178 = 233
+ | r == 188 && g == 188 && b == 188 = 234
+ | r == 198 && g == 198 && b == 198 = 235
+ | r == 208 && g == 208 && b == 208 = 236
+ | r == 218 && g == 218 && b == 218 = 237
+ | r == 228 && g == 228 && b == 228 = 238
+ | r == 238 && g == 238 && b == 238 = 239
+ | r <= 0 && g <= 0 && b <= 0 = 0
+ | r <= 0 && g <= 0 && b <= 95 = 1
+ | r <= 0 && g <= 0 && b <= 135 = 2
+ | r <= 0 && g <= 0 && b <= 175 = 3
+ | r <= 0 && g <= 0 && b <= 215 = 4
+ | r <= 0 && g <= 0 && b <= 255 = 5
+ | r <= 0 && g <= 95 && b <= 0 = 6
+ | r <= 0 && g <= 95 && b <= 95 = 7
+ | r <= 0 && g <= 95 && b <= 135 = 8
+ | r <= 0 && g <= 95 && b <= 175 = 9
+ | r <= 0 && g <= 95 && b <= 215 = 10
+ | r <= 0 && g <= 95 && b <= 255 = 11
+ | r <= 0 && g <= 135 && b <= 0 = 12
+ | r <= 0 && g <= 135 && b <= 95 = 13
+ | r <= 0 && g <= 135 && b <= 135 = 14
+ | r <= 0 && g <= 135 && b <= 175 = 15
+ | r <= 0 && g <= 135 && b <= 215 = 16
+ | r <= 0 && g <= 135 && b <= 255 = 17
+ | r <= 0 && g <= 175 && b <= 0 = 18
+ | r <= 0 && g <= 175 && b <= 95 = 19
+ | r <= 0 && g <= 175 && b <= 135 = 20
+ | r <= 0 && g <= 175 && b <= 175 = 21
+ | r <= 0 && g <= 175 && b <= 215 = 22
+ | r <= 0 && g <= 175 && b <= 255 = 23
+ | r <= 0 && g <= 215 && b <= 0 = 24
+ | r <= 0 && g <= 215 && b <= 95 = 25
+ | r <= 0 && g <= 215 && b <= 135 = 26
+ | r <= 0 && g <= 215 && b <= 175 = 27
+ | r <= 0 && g <= 215 && b <= 215 = 28
+ | r <= 0 && g <= 215 && b <= 255 = 29
+ | r <= 0 && g <= 255 && b <= 0 = 30
+ | r <= 0 && g <= 255 && b <= 95 = 31
+ | r <= 0 && g <= 255 && b <= 135 = 32
+ | r <= 0 && g <= 255 && b <= 175 = 33
+ | r <= 0 && g <= 255 && b <= 215 = 34
+ | r <= 0 && g <= 255 && b <= 255 = 35
+ | r <= 95 && g <= 0 && b <= 0 = 36
+ | r <= 95 && g <= 0 && b <= 95 = 37
+ | r <= 95 && g <= 0 && b <= 135 = 38
+ | r <= 95 && g <= 0 && b <= 175 = 39
+ | r <= 95 && g <= 0 && b <= 215 = 40
+ | r <= 95 && g <= 0 && b <= 255 = 41
+ | r <= 95 && g <= 95 && b <= 0 = 42
+ | r <= 95 && g <= 95 && b <= 95 = 43
+ | r <= 95 && g <= 95 && b <= 135 = 44
+ | r <= 95 && g <= 95 && b <= 175 = 45
+ | r <= 95 && g <= 95 && b <= 215 = 46
+ | r <= 95 && g <= 95 && b <= 255 = 47
+ | r <= 95 && g <= 135 && b <= 0 = 48
+ | r <= 95 && g <= 135 && b <= 95 = 49
+ | r <= 95 && g <= 135 && b <= 135 = 50
+ | r <= 95 && g <= 135 && b <= 175 = 51
+ | r <= 95 && g <= 135 && b <= 215 = 52
+ | r <= 95 && g <= 135 && b <= 255 = 53
+ | r <= 95 && g <= 175 && b <= 0 = 54
+ | r <= 95 && g <= 175 && b <= 95 = 55
+ | r <= 95 && g <= 175 && b <= 135 = 56
+ | r <= 95 && g <= 175 && b <= 175 = 57
+ | r <= 95 && g <= 175 && b <= 215 = 58
+ | r <= 95 && g <= 175 && b <= 255 = 59
+ | r <= 95 && g <= 215 && b <= 0 = 60
+ | r <= 95 && g <= 215 && b <= 95 = 61
+ | r <= 95 && g <= 215 && b <= 135 = 62
+ | r <= 95 && g <= 215 && b <= 175 = 63
+ | r <= 95 && g <= 215 && b <= 215 = 64
+ | r <= 95 && g <= 215 && b <= 255 = 65
+ | r <= 95 && g <= 255 && b <= 0 = 66
+ | r <= 95 && g <= 255 && b <= 95 = 67
+ | r <= 95 && g <= 255 && b <= 135 = 68
+ | r <= 95 && g <= 255 && b <= 175 = 69
+ | r <= 95 && g <= 255 && b <= 215 = 70
+ | r <= 95 && g <= 255 && b <= 255 = 71
+ | r <= 135 && g <= 0 && b <= 0 = 72
+ | r <= 135 && g <= 0 && b <= 95 = 73
+ | r <= 135 && g <= 0 && b <= 135 = 74
+ | r <= 135 && g <= 0 && b <= 175 = 75
+ | r <= 135 && g <= 0 && b <= 215 = 76
+ | r <= 135 && g <= 0 && b <= 255 = 77
+ | r <= 135 && g <= 95 && b <= 0 = 78
+ | r <= 135 && g <= 95 && b <= 95 = 79
+ | r <= 135 && g <= 95 && b <= 135 = 80
+ | r <= 135 && g <= 95 && b <= 175 = 81
+ | r <= 135 && g <= 95 && b <= 215 = 82
+ | r <= 135 && g <= 95 && b <= 255 = 83
+ | r <= 135 && g <= 135 && b <= 0 = 84
+ | r <= 135 && g <= 135 && b <= 95 = 85
+ | r <= 135 && g <= 135 && b <= 135 = 86
+ | r <= 135 && g <= 135 && b <= 175 = 87
+ | r <= 135 && g <= 135 && b <= 215 = 88
+ | r <= 135 && g <= 135 && b <= 255 = 89
+ | r <= 135 && g <= 175 && b <= 0 = 90
+ | r <= 135 && g <= 175 && b <= 95 = 91
+ | r <= 135 && g <= 175 && b <= 135 = 92
+ | r <= 135 && g <= 175 && b <= 175 = 93
+ | r <= 135 && g <= 175 && b <= 215 = 94
+ | r <= 135 && g <= 175 && b <= 255 = 95
+ | r <= 135 && g <= 215 && b <= 0 = 96
+ | r <= 135 && g <= 215 && b <= 95 = 97
+ | r <= 135 && g <= 215 && b <= 135 = 98
+ | r <= 135 && g <= 215 && b <= 175 = 99
+ | r <= 135 && g <= 215 && b <= 215 = 100
+ | r <= 135 && g <= 215 && b <= 255 = 101
+ | r <= 135 && g <= 255 && b <= 0 = 102
+ | r <= 135 && g <= 255 && b <= 95 = 103
+ | r <= 135 && g <= 255 && b <= 135 = 104
+ | r <= 135 && g <= 255 && b <= 175 = 105
+ | r <= 135 && g <= 255 && b <= 215 = 106
+ | r <= 135 && g <= 255 && b <= 255 = 107
+ | r <= 175 && g <= 0 && b <= 0 = 108
+ | r <= 175 && g <= 0 && b <= 95 = 109
+ | r <= 175 && g <= 0 && b <= 135 = 110
+ | r <= 175 && g <= 0 && b <= 175 = 111
+ | r <= 175 && g <= 0 && b <= 215 = 112
+ | r <= 175 && g <= 0 && b <= 255 = 113
+ | r <= 175 && g <= 95 && b <= 0 = 114
+ | r <= 175 && g <= 95 && b <= 95 = 115
+ | r <= 175 && g <= 95 && b <= 135 = 116
+ | r <= 175 && g <= 95 && b <= 175 = 117
+ | r <= 175 && g <= 95 && b <= 215 = 118
+ | r <= 175 && g <= 95 && b <= 255 = 119
+ | r <= 175 && g <= 135 && b <= 0 = 120
+ | r <= 175 && g <= 135 && b <= 95 = 121
+ | r <= 175 && g <= 135 && b <= 135 = 122
+ | r <= 175 && g <= 135 && b <= 175 = 123
+ | r <= 175 && g <= 135 && b <= 215 = 124
+ | r <= 175 && g <= 135 && b <= 255 = 125
+ | r <= 175 && g <= 175 && b <= 0 = 126
+ | r <= 175 && g <= 175 && b <= 95 = 127
+ | r <= 175 && g <= 175 && b <= 135 = 128
+ | r <= 175 && g <= 175 && b <= 175 = 129
+ | r <= 175 && g <= 175 && b <= 215 = 130
+ | r <= 175 && g <= 175 && b <= 255 = 131
+ | r <= 175 && g <= 215 && b <= 0 = 132
+ | r <= 175 && g <= 215 && b <= 95 = 133
+ | r <= 175 && g <= 215 && b <= 135 = 134
+ | r <= 175 && g <= 215 && b <= 175 = 135
+ | r <= 175 && g <= 215 && b <= 215 = 136
+ | r <= 175 && g <= 215 && b <= 255 = 137
+ | r <= 175 && g <= 255 && b <= 0 = 138
+ | r <= 175 && g <= 255 && b <= 95 = 139
+ | r <= 175 && g <= 255 && b <= 135 = 140
+ | r <= 175 && g <= 255 && b <= 175 = 141
+ | r <= 175 && g <= 255 && b <= 215 = 142
+ | r <= 175 && g <= 255 && b <= 255 = 143
+ | r <= 215 && g <= 0 && b <= 0 = 144
+ | r <= 215 && g <= 0 && b <= 95 = 145
+ | r <= 215 && g <= 0 && b <= 135 = 146
+ | r <= 215 && g <= 0 && b <= 175 = 147
+ | r <= 215 && g <= 0 && b <= 215 = 148
+ | r <= 215 && g <= 0 && b <= 255 = 149
+ | r <= 215 && g <= 95 && b <= 0 = 150
+ | r <= 215 && g <= 95 && b <= 95 = 151
+ | r <= 215 && g <= 95 && b <= 135 = 152
+ | r <= 215 && g <= 95 && b <= 175 = 153
+ | r <= 215 && g <= 95 && b <= 215 = 154
+ | r <= 215 && g <= 95 && b <= 255 = 155
+ | r <= 215 && g <= 135 && b <= 0 = 156
+ | r <= 215 && g <= 135 && b <= 95 = 157
+ | r <= 215 && g <= 135 && b <= 135 = 158
+ | r <= 215 && g <= 135 && b <= 175 = 159
+ | r <= 215 && g <= 135 && b <= 215 = 160
+ | r <= 215 && g <= 135 && b <= 255 = 161
+ | r <= 215 && g <= 175 && b <= 0 = 162
+ | r <= 215 && g <= 175 && b <= 95 = 163
+ | r <= 215 && g <= 175 && b <= 135 = 164
+ | r <= 215 && g <= 175 && b <= 175 = 165
+ | r <= 215 && g <= 175 && b <= 215 = 166
+ | r <= 215 && g <= 175 && b <= 255 = 167
+ | r <= 215 && g <= 215 && b <= 0 = 168
+ | r <= 215 && g <= 215 && b <= 95 = 169
+ | r <= 215 && g <= 215 && b <= 135 = 170
+ | r <= 215 && g <= 215 && b <= 175 = 171
+ | r <= 215 && g <= 215 && b <= 215 = 172
+ | r <= 215 && g <= 215 && b <= 255 = 173
+ | r <= 215 && g <= 255 && b <= 0 = 174
+ | r <= 215 && g <= 255 && b <= 95 = 175
+ | r <= 215 && g <= 255 && b <= 135 = 176
+ | r <= 215 && g <= 255 && b <= 175 = 177
+ | r <= 215 && g <= 255 && b <= 215 = 178
+ | r <= 215 && g <= 255 && b <= 255 = 179
+ | r <= 255 && g <= 0 && b <= 0 = 180
+ | r <= 255 && g <= 0 && b <= 95 = 181
+ | r <= 255 && g <= 0 && b <= 135 = 182
+ | r <= 255 && g <= 0 && b <= 175 = 183
+ | r <= 255 && g <= 0 && b <= 215 = 184
+ | r <= 255 && g <= 0 && b <= 255 = 185
+ | r <= 255 && g <= 95 && b <= 0 = 186
+ | r <= 255 && g <= 95 && b <= 95 = 187
+ | r <= 255 && g <= 95 && b <= 135 = 188
+ | r <= 255 && g <= 95 && b <= 175 = 189
+ | r <= 255 && g <= 95 && b <= 215 = 190
+ | r <= 255 && g <= 95 && b <= 255 = 191
+ | r <= 255 && g <= 135 && b <= 0 = 192
+ | r <= 255 && g <= 135 && b <= 95 = 193
+ | r <= 255 && g <= 135 && b <= 135 = 194
+ | r <= 255 && g <= 135 && b <= 175 = 195
+ | r <= 255 && g <= 135 && b <= 215 = 196
+ | r <= 255 && g <= 135 && b <= 255 = 197
+ | r <= 255 && g <= 175 && b <= 0 = 198
+ | r <= 255 && g <= 175 && b <= 95 = 199
+ | r <= 255 && g <= 175 && b <= 135 = 200
+ | r <= 255 && g <= 175 && b <= 175 = 201
+ | r <= 255 && g <= 175 && b <= 215 = 202
+ | r <= 255 && g <= 175 && b <= 255 = 203
+ | r <= 255 && g <= 215 && b <= 0 = 204
+ | r <= 255 && g <= 215 && b <= 95 = 205
+ | r <= 255 && g <= 215 && b <= 135 = 206
+ | r <= 255 && g <= 215 && b <= 175 = 207
+ | r <= 255 && g <= 215 && b <= 215 = 208
+ | r <= 255 && g <= 215 && b <= 255 = 209
+ | r <= 255 && g <= 255 && b <= 0 = 210
+ | r <= 255 && g <= 255 && b <= 95 = 211
+ | r <= 255 && g <= 255 && b <= 135 = 212
+ | r <= 255 && g <= 255 && b <= 175 = 213
+ | r <= 255 && g <= 255 && b <= 215 = 214
+ | r <= 255 && g <= 255 && b <= 255 = 215
+ | otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
+ (fromIntegral r :: Int)
+ (fromIntegral g :: Int)
+ (fromIntegral b :: Int))
+
+sameColor :: Int -> Int -> Int -> Bool
+sameColor r g b = oldRgbColorToColor240 r g b == rgbColorToColor240 r g b
+
+genVal :: Gen Int
+genVal = chooseInt (0, 255)
+
+sameColorCheck :: Property
+sameColorCheck = forAll genVal (\r -> forAll genVal (\g -> forAll genVal (sameColor r g)))
+
+tests :: IO [Test]
+tests = return
+ [ verify "check rgbColorToColor240 optimization is correct" sameColorCheck
+ ]
+
diff --git a/vty.cabal b/vty.cabal
index e65cd7a..692fe3a 100644
--- a/vty.cabal
+++ b/vty.cabal
@@ -1,5 +1,5 @@
name: vty
-version: 5.32
+version: 5.33
license: BSD3
license-file: LICENSE
author: AUTHORS
@@ -45,7 +45,7 @@ library
deepseq >= 1.1 && < 1.5,
directory,
filepath >= 1.0 && < 2.0,
- microlens < 0.4.12,
+ microlens < 0.4.13,
microlens-mtl,
microlens-th,
hashable >= 1.2,
@@ -69,6 +69,7 @@ library
exposed-modules: Graphics.Vty
Graphics.Vty.Attributes
Graphics.Vty.Attributes.Color
+ Graphics.Vty.Attributes.Color240
Graphics.Vty.Config
Graphics.Vty.Error
Graphics.Vty.Image
@@ -104,8 +105,7 @@ library
Graphics.Vty.UnicodeWidthTable.Query
Graphics.Vty.UnicodeWidthTable.Install
- other-modules: Graphics.Vty.Attributes.Color240
- Graphics.Vty.Debug.Image
+ other-modules: Graphics.Vty.Debug.Image
Graphics.Vty.Input.Terminfo.ANSIVT
c-sources: cbits/gwinsz.c
@@ -189,7 +189,7 @@ test-suite verify-using-mock-terminal
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -222,7 +222,7 @@ test-suite verify-terminal
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -255,7 +255,7 @@ test-suite verify-display-attributes
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -281,7 +281,7 @@ test-suite verify-empty-image-props
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -308,7 +308,7 @@ test-suite verify-eval-terminfo-caps
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
blaze-builder >= 0.3.3.2 && < 0.5,
bytestring,
@@ -338,7 +338,7 @@ test-suite verify-image-ops
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -366,7 +366,7 @@ test-suite verify-image-trans
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -393,7 +393,7 @@ test-suite verify-inline
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -421,7 +421,7 @@ test-suite verify-parse-terminfo-caps
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -453,7 +453,7 @@ test-suite verify-simple-span-generation
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -485,7 +485,7 @@ test-suite verify-crop-span-generation
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -517,6 +517,32 @@ test-suite verify-layers-span-generation
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
+ random >= 1.0 && < 1.3,
+ base >= 4.8 && < 5,
+ bytestring,
+ containers,
+ deepseq >= 1.1 && < 1.5,
+ mtl >= 1.1.1.0 && < 2.3,
+ text >= 0.11.3,
+ unix,
+ utf8-string >= 0.3 && < 1.1,
+ vector >= 0.7
+
+test-suite verify-color-mapping
+ default-language: Haskell2010
+ default-extensions: ScopedTypeVariables
+
+ type: detailed-0.9
+
+ hs-source-dirs: test
+
+ test-module: VerifyColor240
+
+ other-modules: Verify
+
+ build-depends: vty,
+ Cabal >= 1.20,
+ QuickCheck >= 2.7,
random >= 1.0 && < 1.2,
base >= 4.8 && < 5,
bytestring,
@@ -528,6 +554,7 @@ test-suite verify-layers-span-generation
utf8-string >= 0.3 && < 1.1,
vector >= 0.7
+
test-suite verify-utf8-width
default-language: Haskell2010
default-extensions: ScopedTypeVariables
@@ -543,7 +570,7 @@ test-suite verify-utf8-width
build-depends: vty,
Cabal >= 1.20,
QuickCheck >= 2.7,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -571,7 +598,7 @@ test-suite verify-using-mock-input
quickcheck-assertions >= 0.1.1,
test-framework == 0.8.*,
test-framework-smallcheck == 0.2.*,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,
@@ -607,7 +634,7 @@ test-suite verify-config
test-framework == 0.8.*,
test-framework-smallcheck == 0.2.*,
test-framework-hunit,
- random >= 1.0 && < 1.2,
+ random >= 1.0 && < 1.3,
base >= 4.8 && < 5,
bytestring,
containers,