on master help sign in
Merge pull request #496 from david-christiansen/color-repl

Add ability to set ANSI italics

commitce9b19bdaabe9bd1013bcde4d9326efafc87a497 authorEdwin Brady <edwin.brady@gmail.com> dateThu 26 Sep 2013, 08:06 (13 years ago) parentbef8dce34f8c45
4 files changed+17−9
src/Idris/Colours.hs+8−6 src/Idris/Completion.hs+1−1 src/Idris/REPL.hs+3−1 src/Idris/REPLParser.hs+5−1
src/Idris/Colours.hs+8−6
@@ -13,11 +13,12 @@ data IdrisColour = IdrisColour { colour :: Color
1313 , vivid :: Bool
1414 , underline :: Bool
1515 , bold :: Bool
16+ , italic :: Bool
1617 }
1718 deriving (Eq, Show)
1819
1920mkColour :: Color -> IdrisColour
20−mkColour c = IdrisColour c True False False
21+mkColour c = IdrisColour c True False False False
2122
2223data ColourTheme = ColourTheme { keywordColour :: IdrisColour
2324 , boundVarColour :: IdrisColour
@@ -30,21 +31,22 @@ data ColourTheme = ColourTheme { keywordColour :: IdrisColour
3031 deriving (Eq, Show)
3132
3233defaultTheme :: ColourTheme
33−defaultTheme = ColourTheme { keywordColour = IdrisColour Black True True True
34+defaultTheme = ColourTheme { keywordColour = IdrisColour Black True True True False
3435 , boundVarColour = mkColour Magenta
35− , implicitColour = IdrisColour Magenta True True False
36+ , implicitColour = IdrisColour Magenta True True False False
3637 , functionColour = mkColour Green
3738 , typeColour = mkColour Blue
3839 , dataColour = mkColour Red
39− , promptColour = IdrisColour Black True False True
40+ , promptColour = IdrisColour Black True False True False
4041 }
4142
4243-- Set the colour of a string using POSIX escape codes
4344colourise :: IdrisColour -> String -> String
44−colourise (IdrisColour c v u b) str = setSGRCode sgr ++ str ++ setSGRCode [Reset]
45+colourise (IdrisColour c v u b i) str = setSGRCode sgr ++ str ++ setSGRCode [Reset]
4546 where sgr = [SetColor Foreground (if v then Vivid else Dull) c] ++
4647 (if u then [SetUnderlining SingleUnderline] else []) ++
47− (if b then [SetConsoleIntensity BoldIntensity] else [])
48+ (if b then [SetConsoleIntensity BoldIntensity] else []) ++
49+ (if i then [SetItalicized True] else [])
4850
4951colouriseKwd :: ColourTheme -> String -> String
5052colouriseKwd t = colourise (keywordColour t)
src/Idris/Completion.hs+1−1
@@ -134,7 +134,7 @@ completeColour (prev, next) = case words (reverse prev) of
134134 isCmd ":color" = True
135135 isCmd _ = False
136136 colours = map (map toLower . show) $ enumFromTo (minBound::Color) maxBound
137− formats = ["vivid", "dull", "underline", "nounderline", "bold", "nobold"]
137+ formats = ["vivid", "dull", "underline", "nounderline", "bold", "nobold", "italic", "noitalic"]
138138 completeColourFormat = let getCmpl = completeWith (colours ++ formats) in
139139 completeWord Nothing " \t" (return . getCmpl)
140140
src/Idris/REPL.hs+3−1
@@ -277,7 +277,9 @@ edit f orig
277277 let cmd = editor ++ line ++ f
278278 liftIO $ system cmd
279279 clearErr
280− putIState (orig { idris_options = idris_options i })
280+ putIState $ orig { idris_options = idris_options i
281+ , idris_colourTheme = idris_colourTheme i
282+ }
281283 loadInputs [f]
282284 iucheck
283285 return ()
src/Idris/REPLParser.hs+5−1
@@ -104,6 +104,8 @@ pColourMod = try (P.symbol "vivid" >> return doVivid)
104104 <|> try (P.symbol "nounderline" >> return doNoUnderline)
105105 <|> try (P.symbol "bold" >> return doBold)
106106 <|> try (P.symbol "nobold" >> return doNoBold)
107+ <|> try (P.symbol "italic" >> return doItalic)
108+ <|> try (P.symbol "noitalic" >> return doNoItalic)
107109 <|> try (pColour >>= return . doSetColour)
108110 where doVivid i = i { vivid = True }
109111 doDull i = i { vivid = False }
@@ -111,6 +113,8 @@ pColourMod = try (P.symbol "vivid" >> return doVivid)
111113 doNoUnderline i = i { underline = False }
112114 doBold i = i { bold = True }
113115 doNoBold i = i { bold = False }
116+ doItalic i = i { italic = True }
117+ doNoItalic i = i { italic = False }
114118 doSetColour c i = i { colour = c }
115119
116120
@@ -126,7 +130,7 @@ pColourType = doColourType colourTypes
126130
127131pSetColourCmd :: P.IdrisParser Command
128132pSetColourCmd = (do c <- pColourType
129− let defaultColour = IdrisColour Black True False False
133+ let defaultColour = IdrisColour Black True False False False
130134 opts <- sepBy pColourMod (P.whiteSpace)
131135 let colour = foldr ($) defaultColour $ reverse opts
132136 return $ SetColour c colour)