on master help sign in
Colourise REPL prompt
e3bd62bDavid Christiansen
src/Idris/AbsSyntax.hs+1
@@ -517,6 +517,7 @@ setColour ct c = do i <- getIState
517 setColour' FunctionColour c t = t { functionColour = c }
517 setColour' FunctionColour c t = t { functionColour = c }
518 setColour' TypeColour c t = t { typeColour = c }
518 setColour' TypeColour c t = t { typeColour = c }
519 setColour' DataColour c t = t { dataColour = c }
519 setColour' DataColour c t = t { dataColour = c }
520+ setColour' PromptColour c t = t { promptColour = c }
520
521
521logLvl :: Int -> String -> Idris ()
522logLvl :: Int -> String -> Idris ()
522logLvl l str = do i <- getIState
523logLvl l str = do i <- getIState
src/Idris/Colours.hs+7
@@ -4,6 +4,7 @@ module Idris.Colours (
4 defaultTheme,
4 defaultTheme,
5 colouriseKwd, colouriseBound, colouriseImplicit,
5 colouriseKwd, colouriseBound, colouriseImplicit,
6 colouriseType, colouriseFun, colouriseData,
6 colouriseType, colouriseFun, colouriseData,
7+ colourisePrompt,
7 ColourType(..)) where
8 ColourType(..)) where
8
9
9import System.Console.ANSI
10import System.Console.ANSI
@@ -24,6 +25,7 @@ data ColourTheme = ColourTheme { keywordColour :: IdrisColour
24 , functionColour :: IdrisColour
25 , functionColour :: IdrisColour
25 , typeColour :: IdrisColour
26 , typeColour :: IdrisColour
26 , dataColour :: IdrisColour
27 , dataColour :: IdrisColour
28+ , promptColour :: IdrisColour
27 }
29 }
28 deriving (Eq, Show)
30 deriving (Eq, Show)
29
31
@@ -34,6 +36,7 @@ defaultTheme = ColourTheme { keywordColour = IdrisColour Black True True True
34 , functionColour = mkColour Green
36 , functionColour = mkColour Green
35 , typeColour = mkColour Blue
37 , typeColour = mkColour Blue
36 , dataColour = mkColour Red
38 , dataColour = mkColour Red
39+ , promptColour = IdrisColour Black True False True
37 }
40 }
38
41
39-- Set the colour of a string using POSIX escape codes
42-- Set the colour of a string using POSIX escape codes
@@ -61,6 +64,9 @@ colouriseType t = colourise (typeColour t)
61colouriseData :: ColourTheme -> String -> String
64colouriseData :: ColourTheme -> String -> String
62colouriseData t = colourise (dataColour t)
65colouriseData t = colourise (dataColour t)
63
66
67+colourisePrompt :: ColourTheme -> String -> String
68+colourisePrompt t = colourise (promptColour t)
69+
64
70
65data ColourType = KeywordColour
71data ColourType = KeywordColour
66 | BoundVarColour
72 | BoundVarColour
@@ -68,4 +74,5 @@ data ColourType = KeywordColour
68 | FunctionColour
74 | FunctionColour
69 | TypeColour
75 | TypeColour
70 | DataColour
76 | DataColour
77+ | PromptColour
71 deriving (Eq, Show, Bounded, Enum)
78 deriving (Eq, Show, Bounded, Enum)
src/Idris/REPL.hs+7−2
@@ -20,6 +20,7 @@ import Idris.Completion
20import Idris.IdeSlave
20import Idris.IdeSlave
21import Idris.Chaser
21import Idris.Chaser
22import Idris.Imports
22import Idris.Imports
23+import Idris.Colours
23
24
24import Paths_idris
25import Paths_idris
25import Util.System
26import Util.System
@@ -68,14 +69,18 @@ repl :: IState -- ^ The initial state
68repl orig mods
69repl orig mods
69 = H.catch
70 = H.catch
70 (do let quiet = opt_quiet (idris_options orig)
71 (do let quiet = opt_quiet (idris_options orig)
72+ i <- lift getIState
73+ let colour = idris_colourRepl i
74+ let theme = idris_colourTheme i
71 let prompt = if quiet
75 let prompt = if quiet
72 then ""
76 then ""
73− else mkPrompt mods ++ "> "
77+ else let str = mkPrompt mods ++ ">" in
78+ (if colour then colourisePrompt theme str else str) ++ " "
74 x <- getInputLine prompt
79 x <- getInputLine prompt
75 case x of
80 case x of
76 Nothing -> do lift $ when (not quiet) (iputStrLn "Bye bye")
81 Nothing -> do lift $ when (not quiet) (iputStrLn "Bye bye")
77 return ()
82 return ()
78− Just input -> H.catch
83+ Just input -> H.catch
79 (do ms <- lift $ processInput input orig mods
84 (do ms <- lift $ processInput input orig mods
80 case ms of
85 case ms of
81 Just mods -> repl orig mods
86 Just mods -> repl orig mods