X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTerminal.hs;fp=src%2FTerminal.hs;h=064c5ff87e27af60f328f14e9c4d3f05f19cf10d;hb=2fe07315388ff9d0d6b548bba27ddf25dd692a40;hp=0000000000000000000000000000000000000000;hpb=3e6ba8b8a49258f56d283daf8768ccef99dd4b63;p=dead%2Fhtsn-import.git diff --git a/src/Terminal.hs b/src/Terminal.hs new file mode 100644 index 0000000..064c5ff --- /dev/null +++ b/src/Terminal.hs @@ -0,0 +1,79 @@ +module Terminal ( + display_debug, + display_error, + display_info, + display_sent, + display_warning ) +where + +import Control.Monad.IO.Class (MonadIO(..)) +import System.Console.ANSI ( + SGR( SetColor ), + Color(..), + ColorIntensity( Vivid ), + ConsoleLayer( Foreground ), + hSetSGR ) +import System.IO ( Handle, hPutStr, stderr, stdout ) + +-- | Perform a computation (anything in MonadIO) with the given +-- graphics mode(s) enabled. Revert to the previous graphics mode +-- after the computation has finished. +with_sgr :: (MonadIO m) => Handle -> [SGR] -> m a -> m a +with_sgr h sgrs computation = do + liftIO $ hSetSGR h sgrs + x <- computation + liftIO $ hSetSGR h [] + return x + +-- | Perform a computation (anything in MonadIO) with the output set +-- to a certain color. Reset to the default color after the +-- computation has finished. +with_color :: (MonadIO m) => Handle -> Color -> m a -> m a +with_color h color = + with_sgr h [SetColor Foreground Vivid color] + + +-- | Write the given String to a handle in color. The funnyCaps are +-- for synergy with putstrLn and friends. +-- +hPutStrColor :: Handle -> Color -> String -> IO () +hPutStrColor h c = with_color h c . hPutStr h + + +-- | Write the given line to a handle in color. The funnyCaps are for +-- synergy with putstrLn and friends. +-- +hPutStrColorLn :: Handle -> Color -> String -> IO () +hPutStrColorLn h c s = hPutStrColor h c (s ++ "\n") + + +-- | Display text sent to the feed on the console. Don't automatically +-- append a newline. +-- +display_sent :: String -> IO () +display_sent = hPutStrColor stdout Green + + +-- | Display debug text on the console. Don't automatically append a +-- newline in case the raw text is needed for, uh, debugging. +-- +display_debug :: String -> IO () +display_debug = putStr + + +-- | Display an informational message on the console. +-- +display_info :: String -> IO () +display_info = hPutStrColorLn stdout Cyan + + +-- | Display a warning on the console. Uses stderr instead of stdout. +-- +display_warning :: String -> IO () +display_warning = hPutStrColorLn stderr Yellow + + +-- | Display an error on the console. Uses stderr instead of stdout. +-- +display_error :: String -> IO () +display_error = hPutStrColorLn stderr Red