From 470b88d719fb6e740569c8e35affa0db6d3ed7fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= Date: Wed, 28 Aug 2013 11:28:38 -0300 Subject: Colorful header --- Config.hs | 2 ++ Handlers.hs | 6 +++--- Screen.hs | 8 ++++++-- State.hs | 2 ++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Config.hs b/Config.hs index f5990e1..b446838 100644 --- a/Config.hs +++ b/Config.hs @@ -16,6 +16,7 @@ data LazymailConfig = LazymailConfig { baseColor :: (Color, Color) -- (foreground, background) , selectionColor :: (Color, Color) , statusBarColor :: (Color, Color) + , headerColor :: (Color, Color) , showStatusBar :: Bool , initialPath :: FilePath , filterMaildirsHook :: [FilePath] -> IO [FilePath] @@ -25,6 +26,7 @@ defaultConfig = LazymailConfig { baseColor = (ColorWhite, ColorBlack) , selectionColor = (ColorYellow, ColorBlack) , statusBarColor = (ColorYellow, ColorBlack) + , headerColor = (ColorYellow, ColorBlack) , showStatusBar = True , initialPath = "" , filterMaildirsHook = \mds -> return mds diff --git a/Handlers.hs b/Handlers.hs index 4605756..3d0b787 100644 --- a/Handlers.hs +++ b/Handlers.hs @@ -15,7 +15,7 @@ import Email(parseEmail, getFields, getSubject, getFrom) import Maildir import Print import State -import System.IO(IOMode(..), hGetContents, openFile) +import qualified System.IO.UTF8 as UTF8 import Types (LazymailCurses) previousMode :: Mode -> LazymailCurses () @@ -30,7 +30,7 @@ changeMode :: Mode -> LazymailCurses () changeMode EmailMode = return () changeMode IndexMode = do st <- get - msg <- liftIO $ readFile . selectedEmailPath . indexState $ st + msg <- liftIO $ UTF8.readFile . selectedEmailPath . indexState $ st let ist = (indexState st) { selectedEmail = (parseEmail msg) } put $ st { mode = EmailMode, indexState = ist } @@ -123,7 +123,7 @@ scrollCrop top rows xs = take rows $ drop top xs formatIndexModeRows st = mapM formatRow where formatRow fp = do - msg <- hGetContents =<< (openFile fp ReadMode) + msg <- UTF8.readFile fp let email = parseEmail msg let fs = getFields email let str = normalizeLen (screenColumns st) . concat $ diff --git a/Screen.hs b/Screen.hs index 98dbfa0..699f1b6 100644 --- a/Screen.hs +++ b/Screen.hs @@ -50,7 +50,8 @@ startCurses = do basColID <- newColorID (fst . baseColor $ cfg) (snd . baseColor $ cfg) 1 selColID <- newColorID (fst . selectionColor $ cfg) (snd . selectionColor $ cfg) 2 staColID <- newColorID (fst . statusBarColor $ cfg) (snd . statusBarColor $ cfg) 3 - let style = ColorStyle defaultColorID selColID staColID + heaColID <- newColorID (fst . headerColor $ cfg) (snd . headerColor $ cfg) 3 + let style = ColorStyle defaultColorID selColID staColID heaColID return $ st { screenRows = fromIntegral $ rows - 1 , screenColumns = fromIntegral $ cols , colorStyle = style } @@ -135,15 +136,18 @@ drawEmailHelper = do let cropWith xs = normalizeLen $ (screenColumns st) - (length xs) let row = curRowAsInteger st liftUpdate $ do + setColor $ headerColorID . colorStyle $ st moveCursor row (colPadAsInteger st) drawString $ ("From: " ++) $ cropWith "From: " . ppNameAddr . getFrom $ fs moveCursor (row + 1) (colPadAsInteger st) drawString $ ("To: " ++) $ cropWith "To: " . ppNameAddr . getTo $ fs moveCursor (row + 2) (colPadAsInteger st) drawString $ ("Subject: " ++) $ cropWith "Subject: " . ppSubject . getSubject $ fs + setColor $ baseColorID . colorStyle $ st let body = getBody $ selectedEmail . indexState $ st - liftUpdate $ drawBody (row + 4) (colPadAsInteger st) (scrRowsAsInteger st) $ formatBody body (screenColumns st) + let maxRows = if statusBar st then (scrRowsAsInteger st) - 1 else scrRowsAsInteger st + liftUpdate $ drawBody (row + 4) (colPadAsInteger st) maxRows $ formatBody body (screenColumns st) where drawBody _ _ _ [] = return () drawBody row col maxRows (xs:xss) = do diff --git a/State.hs b/State.hs index d047c06..80d562a 100644 --- a/State.hs +++ b/State.hs @@ -57,6 +57,7 @@ data ColorStyle = ColorStyle { baseColorID :: ColorID , selectionColorID :: ColorID , statusBarColorID :: ColorID + , headerColorID :: ColorID } initialState = LazymailState { @@ -100,6 +101,7 @@ initialColorStyle = ColorStyle { baseColorID = defaultColorID , selectionColorID = defaultColorID , statusBarColorID = defaultColorID + , headerColorID = defaultColorID } scrColsAsInteger st = toInteger $ screenColumns st -- cgit v1.2.3