{-# LANGUAGE UnicodeSyntax, MultiParamTypeClasses #-} -- | This module contains some empty configs definitions and some function fields of defaultConfig module Todos.Default.Utils where import System.Console.ANSI import Todos.Types import Todos.Dot import Todos.Default.CmdLine import Todos.Default.Config import Todos.Default.Print import Todos.Tree -- | Empty BaseConfig emptyBaseConfig ∷ BaseConfig emptyBaseConfig = BConfig { outOnlyFirst = False, outColors = False, outIds = False, outHighlight = False, sorting = DoNotSort, pruneL = Limit 20, minL = Limit 0, commandToRun = JustShow, prefix = Nothing, outputFormat = "%s %D%t%n %d", indentString = " ", skipStatus = False, groupByFile = False, groupByTag = False, groupByStatus = False, forcedStatus = Nothing, topStatus = Nothing } -- | Default empty DefaultConfig (nullConfig field of defaultConfig) emptyConfig ∷ DefaultConfig emptyConfig = DConfig { baseConfig = emptyBaseConfig, query = Empty } -- | Default Todos config defaultConfig ∷ TodosConfig DefaultConfig defaultConfig = Todos { parseCommandLine = parseCmdLine, filterTodos = defaultTodosFilter, statusConsoleColor = statusColor, itemConsoleColor = defItemConsoleColor, highlightColor = (Vivid, Magenta), itemColor = getColor, itemShape = getShape, printTodos = defaultPrintTodos, nullConfig = emptyConfig } -- | Make a list transformer composeAll ∷ DateTime → DefaultConfig → (Todo → [Todo]) composeAll date conf = let pred = compose date $ query conf bc = baseConfig conf in pruneSelector bc pred -- | Default filter for TODOs (filterTodos field of defaultConfig) defaultTodosFilter ∷ DateTime → DefaultConfig → [Todo] → [Todo] defaultTodosFilter dt conf todos = let t = delTag "-" todos bc = baseConfig conf in if outHighlight bc then t else concatMap (composeAll dt conf) t -- | Parse command line (default function) parseCmdLine ∷ DateTime -- ^ Current date/time → DefaultConfig -- ^ Default config → [String] -- ^ Command line args → CmdLineParseResult DefaultConfig parseCmdLine currDate dc args = case parseCmdLine' currDate args of Right (opts, files) → case opts of Help → CmdLineHelp _ → Parsed (buildQuery (baseConfig dc) opts) files Left str → ParseError str -- | Prepare PrintConfig for console output functions. Is called from realTodos. mkPrintConfig ∷ (RuntimeConfig c) ⇒ DateTime → c → TodosConfig c → PrintConfig c mkPrintConfig dt conf tcfg = PConfig { printConfig = conf, printStatusColor = statusConsoleColor tcfg, printItemColor = itemConsoleColor tcfg, printHighlightColor = highlightColor tcfg, doHighlight = getPredicate dt conf }