Use terminfo to highlight warnings and errors in blue and red

This replaces the hardwired ANSI escape codes that were accidentally included
in a previous patch.

This adds a dependency on terminfo, but this should be unproblematic, since
haskeline already depends on the same underlying C library.

The color highlighting is omitted on Windows.
This commit is contained in:
hallgren
2014-10-28 19:04:48 +00:00
parent e41d9e34bb
commit 0519493ca9
4 changed files with 34 additions and 4 deletions

View File

@@ -1,11 +1,18 @@
{-# LANGUAGE CPP #-}
module GF.System.Console(
-- ** Changing which character encoding to use for console IO
setConsoleEncoding,changeConsoleEncoding) where
setConsoleEncoding,changeConsoleEncoding,
-- ** Console colors
TermColors(..),getTermColors
) where
import System.IO
import Control.Monad(guard)
import Control.Monad.Trans(MonadIO(..))
#ifdef mingw32_HOST_OS
import System.Win32.Console
import System.Win32.NLS
#else
import System.Console.Terminfo
#endif
-- | Set the console encoding (for Windows, has no effect on Unix-like systems)
@@ -43,3 +50,21 @@ readCP code =
"UTF-8" -> Just 65001
_ -> Nothing
#endif
data TermColors = TermColors { redFg,blueFg,restore :: String } deriving Show
noTermColors = TermColors "" "" ""
getTermColors :: MonadIO m => m TermColors
#ifdef mingw32_HOST_OS
getTermColors = return noTermColors
#else
getTermColors =
liftIO $
do term <- setupTermFromEnv
return $ maybe noTermColors id $ getCapability term $
do n <- termColors
guard (n>=8)
fg <- setForegroundColor
restore <- restoreDefaultColors
return $ TermColors (fg Red) (fg Blue) restore
#endif