on master help sign in
implement config parsing
ce9515aCorey O'Connor
src/Data/Terminfo/Parse.hs+1−1
@@ -16,7 +16,7 @@ import qualified Data.Vector.Unboxed as Vector
16
16
17import Numeric (showHex)
17import Numeric (showHex)
18
18
19−import Text.ParserCombinators.Parsec
19+import Text.Parsec
20
20
21data CapExpression = CapExpression
21data CapExpression = CapExpression
22 { capOps :: !CapOps
22 { capOps :: !CapOps
src/Graphics/Vty/Config.hs+24−1
@@ -7,11 +7,17 @@
7module Graphics.Vty.Config where
7module Graphics.Vty.Config where
8
8
9import Data.Default
9import Data.Default
10+import Data.Either (either)
11+import Data.Monoid
10
12
11import Graphics.Vty.Input.Events
13import Graphics.Vty.Input.Events
12
14
13import System.FilePath
15import System.FilePath
14
16
17+import Text.Parsec
18+import qualified Text.Parsec.Token as P
19+import Text.Parsec.Language (haskellDef)
20+
15data Config = Config
21data Config = Config
16 { singleEscPeriod :: Int -- ^ AKA VTIME. The default is 100000 microseconds or 0.1 seconds.
22 { singleEscPeriod :: Int -- ^ AKA VTIME. The default is 100000 microseconds or 0.1 seconds.
17 -- | Debug information about the input process is appended to the file.
23 -- | Debug information about the input process is appended to the file.
@@ -26,5 +32,22 @@ instance Default Config where
26 , inputOverrides = []
32 , inputOverrides = []
27 }
33 }
28
34
35+-- not a proper monoid but useful as one.
36+instance Monoid Config where
37+ mempty = def
38+ mappend c0 c1 = c1 { inputOverrides = inputOverrides c0 <> inputOverrides c1 }
39+
29parseConfigFile :: FilePath -> IO Config
40parseConfigFile :: FilePath -> IO Config
30−parseConfigFile path = return def
41+parseConfigFile path = either (const def) id <$> parseFromFile parseConfig path
42+
43+parseConfig = do
44+ let lexer = P.makeTokenParser haskellDef
45+ parseOverride = do
46+ P.whiteSpace lexer
47+ string "map"
48+ P.whiteSpace lexer
49+ bytes <- P.stringLiteral
50+ key <- parseKey
51+ modifier <- parseModifier
52+ _ <- manyTill space newline
53+ overrides <- many $ try parseOverride <|> ignoreOverride