taskell-1.9.2.0: src/IO/Config/Layout.hs
module IO.Config.Layout
( Config
, defaultConfig
, parser
, padding
, columnWidth
, columnPadding
, descriptionIndicator
, statusBar
) where
import ClassyPrelude
import Data.Ini.Config
import IO.Config.Parser (noEmpty, parseText)
data Config = Config
{ padding :: Int
, columnWidth :: Int
, columnPadding :: Int
, descriptionIndicator :: Text
, statusBar :: Bool
}
defaultConfig :: Config
defaultConfig =
Config
{padding = 1, columnWidth = 30, columnPadding = 3, descriptionIndicator = "≡", statusBar = True}
paddingP :: SectionParser Int
paddingP = fromMaybe (padding defaultConfig) <$> fieldMbOf "padding" number
columnWidthP :: SectionParser Int
columnWidthP = fromMaybe (columnWidth defaultConfig) <$> fieldMbOf "column_width" number
columnPaddingP :: SectionParser Int
columnPaddingP = fromMaybe (columnPadding defaultConfig) <$> fieldMbOf "column_padding" number
descriptionIndicatorP :: SectionParser Text
descriptionIndicatorP =
fromMaybe (descriptionIndicator defaultConfig) . (noEmpty . parseText =<<) <$>
fieldMb "description_indicator"
statusBarP :: SectionParser Bool
statusBarP = fieldFlagDef "statusbar" (statusBar defaultConfig)
parser :: IniParser Config
parser =
fromMaybe defaultConfig <$>
sectionMb
"layout"
(Config <$> paddingP <*> columnWidthP <*> columnPaddingP <*> descriptionIndicatorP <*>
statusBarP)