{-# LANGUAGE ScopedTypeVariables, TypeSynonymInstances, FlexibleInstances #-}
module TaskMonad.Utils
( getTaskwarriorTaskList
, getTaskwarriorIds
, isTWReport
, defaulttwreports
, execCommand
, execCommandWithOutput
, twicon
)
where
import Data.List
import Data.Maybe
import System.Process
import System.IO
import Control.Monad ( filterM )
import XMonad hiding ( liftX )
import XMonad.Util.Font
import qualified XMonad.StackSet as W
import XMonad.Layout.Decoration
import XMonad.Prompt
import XMonad.Prompt.Input
import XMonad.Util.Image
import XMonad.Util.NamedWindows
import XMonad.Util.XUtils
import XMonad.Util.NamedScratchpad
import XMonad.Util.Run
import XMonad.Actions.GridSelect
getTaskwarriorIds
:: String
-> String
-> IO [String]
getTaskwarriorIds filter category = do
result <- execCommandWithOutput "task" (filter ++ " _" ++ category)
return $ lines result
getTaskwarriorTaskDescription
:: String
-> IO (String, String)
getTaskwarriorTaskDescription id = do
result <- execCommandWithOutput "task" ("_get " ++ id ++ ".description")
return (id, result)
getTaskDescription
:: String
-> IO String
getTaskDescription id =
execCommandWithOutput "task" ("_get " ++ id ++ ".description")
getTaskwarriorTaskList
:: String
-> [String]
-> IO [[String]]
getTaskwarriorTaskList filter taskproperties = do
ids <- getTaskwarriorIds filter "ids"
traverse (getTaskwarriorTaskProperties taskproperties) ids
getTaskwarriorTaskProperties
:: Traversable t
=> t String
-> String
-> IO (t String)
getTaskwarriorTaskProperties properties id =
traverse (getTaskwarriorTaskProperty id) properties
getTaskwarriorTaskProperty
:: String
-> String
-> IO String
getTaskwarriorTaskProperty id property = do
result <- execCommandWithOutput "task" ("_get " ++ id ++ "." ++ property)
return $ filter (/= '\n') result
isTWReport :: String -> Bool
isTWReport command = head (words command) `elem` defaulttwreports
defaulttwreports :: [String]
defaulttwreports =
[ "dailyreview"
, "weeklyreview"
, "inbox"
, "processInbox"
, "process"
, "active"
, "all"
, "blocked"
, "blocking"
, "completed"
, "done"
, "list"
, "long"
, "ls"
, "minimal"
, "newest"
, "next"
, "oldest"
, "overdue"
, "ready"
, "recurring"
, "unblocked"
, "waiting"
, "burndown.daily"
, "burndown.monthly"
, "burndown.weekly"
, "calendar"
, "colors"
, "columns"
, "commands"
, "diagnostics"
, "ghistory.annual"
, "ghistory.monthly"
, "ghistory.weekly"
, "ghistory.daily"
, "history.annual"
, "history.monthly"
, "history.weekly"
, "history.daily"
, "ids"
, "information"
, "projects"
, "reports"
, "show"
, "stats"
, "summary"
, "tags"
, "timesheet"
, "udas"
, "uuids"
]
execCommand :: MonadIO m => String -> m ()
execCommand = unsafeSpawn
execCommandWithOutput :: FilePath -> String -> IO String
execCommandWithOutput executable args = do
(_, Just hout, _, _) <- createProcess (proc executable (words args))
{ std_out = CreatePipe
}
hGetContents hout
twicon :: [[Bool]]
twicon =
[ [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, True
, True
, False
, False
, False
, False
, True
, True
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, True
, False
, False
, False
, False
, True
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
, [ False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
, False
]
]