{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Hledger.Cli.Commands.Tags ( tagsmode ,tags ) where import Data.List import qualified Data.Text as T import Safe import Hledger import Hledger.Cli.CliOptions tagsmode = hledgerCommandMode $(embedFileRelative "Hledger/Cli/Commands/Tags.txt") [] -- [flagNone ["strict"] (setboolopt "strict") "makes date comparing strict"] -- [generalflagsgroup1] [] ([], Just $ argsFlag "[TAGREGEX [QUERY...]]") tags CliOpts{rawopts_=rawopts,reportopts_=ropts} j = do d <- getCurrentDay let args = listofstringopt "args" rawopts mtagpats = headMay args queryargs = drop 1 args q = queryFromOpts d $ ropts{query_ = unwords queryargs} txns = filter (q `matchesTransaction`) $ jtxns $ journalSelectingAmountFromOpts ropts j tags = nub $ sort $ (maybe id (filter . regexMatchesCI) mtagpats) $ map (T.unpack . fst) $ concatMap transactionAllTags txns mapM_ putStrLn tags