on master help sign in
Colourise REPL prompt
commite3bd62b81b5e131f8f3c283592f77f8eb60051d1 authorDavid Christiansen <david@davidchristiansen.dk> dateFri 13 Sep 2013, 14:09 (13 years ago) parentd759b26
3 files changed+15−2
src/Idris/AbsSyntax.hs+1 src/Idris/Colours.hs+7 src/Idris/REPL.hs+7−2
src/Idris/AbsSyntax.hs+1
@@ -517,6 +517,7 @@ setColour ct c = do i <- getIState
517517 setColour' FunctionColour c t = t { functionColour = c }
518518 setColour' TypeColour c t = t { typeColour = c }
519519 setColour' DataColour c t = t { dataColour = c }
520+ setColour' PromptColour c t = t { promptColour = c }
520521
521522logLvl :: Int -> String -> Idris ()
522523logLvl l str = do i <- getIState
src/Idris/Colours.hs+7
@@ -4,6 +4,7 @@ module Idris.Colours (
44 defaultTheme,
55 colouriseKwd, colouriseBound, colouriseImplicit,
66 colouriseType, colouriseFun, colouriseData,
7+ colourisePrompt,
78 ColourType(..)) where
89
910import System.Console.ANSI
@@ -24,6 +25,7 @@ data ColourTheme = ColourTheme { keywordColour :: IdrisColour
2425 , functionColour :: IdrisColour
2526 , typeColour :: IdrisColour
2627 , dataColour :: IdrisColour
28+ , promptColour :: IdrisColour
2729 }
2830 deriving (Eq, Show)
2931
@@ -34,6 +36,7 @@ defaultTheme = ColourTheme { keywordColour = IdrisColour Black True True True
3436 , functionColour = mkColour Green
3537 , typeColour = mkColour Blue
3638 , dataColour = mkColour Red
39+ , promptColour = IdrisColour Black True False True
3740 }
3841
3942-- Set the colour of a string using POSIX escape codes
@@ -61,6 +64,9 @@ colouriseType t = colourise (typeColour t)
6164colouriseData :: ColourTheme -> String -> String
6265colouriseData t = colourise (dataColour t)
6366
67+colourisePrompt :: ColourTheme -> String -> String
68+colourisePrompt t = colourise (promptColour t)
69+
6470
6571data ColourType = KeywordColour
6672 | BoundVarColour
@@ -68,4 +74,5 @@ data ColourType = KeywordColour
6874 | FunctionColour
6975 | TypeColour
7076 | DataColour
77+ | PromptColour
7178 deriving (Eq, Show, Bounded, Enum)
src/Idris/REPL.hs+7−2
@@ -20,6 +20,7 @@ import Idris.Completion
2020import Idris.IdeSlave
2121import Idris.Chaser
2222import Idris.Imports
23+import Idris.Colours
2324
2425import Paths_idris
2526import Util.System
@@ -68,14 +69,18 @@ repl :: IState -- ^ The initial state
6869repl orig mods
6970 = H.catch
7071 (do let quiet = opt_quiet (idris_options orig)
72+ i <- lift getIState
73+ let colour = idris_colourRepl i
74+ let theme = idris_colourTheme i
7175 let prompt = if quiet
7276 then ""
73− else mkPrompt mods ++ "> "
77+ else let str = mkPrompt mods ++ ">" in
78+ (if colour then colourisePrompt theme str else str) ++ " "
7479 x <- getInputLine prompt
7580 case x of
7681 Nothing -> do lift $ when (not quiet) (iputStrLn "Bye bye")
7782 return ()
78− Just input -> H.catch
83+ Just input -> H.catch
7984 (do ms <- lift $ processInput input orig mods
8085 case ms of
8186 Just mods -> repl orig mods