mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-19 18:29:36 +03:00
tags: add --values flag
This commit is contained in:
parent
2aa5bd1653
commit
0b793bca1b
@ -9,13 +9,16 @@ where
|
|||||||
|
|
||||||
import Data.List
|
import Data.List
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import qualified Data.Text.IO as T
|
||||||
import Safe
|
import Safe
|
||||||
|
import System.Console.CmdArgs.Explicit as C
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Cli.CliOptions
|
import Hledger.Cli.CliOptions
|
||||||
|
|
||||||
tagsmode = hledgerCommandMode
|
tagsmode = hledgerCommandMode
|
||||||
$(embedFileRelative "Hledger/Cli/Commands/Tags.txt")
|
$(embedFileRelative "Hledger/Cli/Commands/Tags.txt")
|
||||||
[] -- [flagNone ["strict"] (setboolopt "strict") "makes date comparing strict"] --
|
[flagNone ["values"] (setboolopt "values") "list tag values instead of tag names"
|
||||||
|
]
|
||||||
[generalflagsgroup1]
|
[generalflagsgroup1]
|
||||||
hiddenflags
|
hiddenflags
|
||||||
([], Just $ argsFlag "[TAGREGEX [QUERY...]]")
|
([], Just $ argsFlag "[TAGREGEX [QUERY...]]")
|
||||||
@ -24,12 +27,15 @@ tags CliOpts{rawopts_=rawopts,reportopts_=ropts} j = do
|
|||||||
d <- getCurrentDay
|
d <- getCurrentDay
|
||||||
let
|
let
|
||||||
args = listofstringopt "args" rawopts
|
args = listofstringopt "args" rawopts
|
||||||
mtagpats = headMay args
|
mtagpat = headMay args
|
||||||
queryargs = drop 1 args
|
queryargs = drop 1 args
|
||||||
|
values = boolopt "values" rawopts
|
||||||
q = queryFromOpts d $ ropts{query_ = unwords queryargs}
|
q = queryFromOpts d $ ropts{query_ = unwords queryargs}
|
||||||
txns = filter (q `matchesTransaction`) $ jtxns $ journalSelectingAmountFromOpts ropts j
|
txns = filter (q `matchesTransaction`) $ jtxns $ journalSelectingAmountFromOpts ropts j
|
||||||
tags =
|
tagsorvalues =
|
||||||
nub $ sort $
|
nub $ sort $
|
||||||
(maybe id (filter . regexMatchesCI) mtagpats) $
|
[if values then v else t
|
||||||
map (T.unpack . fst) $ concatMap transactionAllTags txns
|
| (t,v) <- concatMap transactionAllTags txns
|
||||||
mapM_ putStrLn tags
|
, maybe True (`regexMatchesCI` T.unpack t) mtagpat
|
||||||
|
]
|
||||||
|
mapM_ T.putStrLn tagsorvalues
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
tags\
|
tags\
|
||||||
List all the tag names used in the journal. With a TAGREGEX argument,
|
List all the tag names used in the journal. With a TAGREGEX argument,
|
||||||
only tag names matching the regular expression (case insensitive) are shown.
|
only tag names matching the regular expression (case insensitive) are shown.
|
||||||
With QUERY arguments, only transactions matching the query are considered.
|
With QUERY arguments, only transactions matching the query are considered.
|
||||||
|
With --values flag, the tags' unique values are listed instead.
|
||||||
|
|
||||||
_FLAGS_
|
_FLAGS_
|
||||||
|
|
||||||
There's no direct way to list a tag's values, but there is an indirect way:
|
|
||||||
--pivot converts a tag's values to accounts, which you can list, like this:
|
|
||||||
|
|
||||||
hledger --pivot SOMETAG accounts --used
|
|
||||||
|
28
tests/tags.test
Normal file
28
tests/tags.test
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# tags command
|
||||||
|
|
||||||
|
2000/1/1 ; ttag:foo
|
||||||
|
(a) 1 ; ptag:bar
|
||||||
|
|
||||||
|
2000/1/2 ; ttag2:foo
|
||||||
|
(a) 1 ; ptag:qux
|
||||||
|
|
||||||
|
# 1. list all tags
|
||||||
|
$ hledger -f - tags
|
||||||
|
ptag
|
||||||
|
ttag
|
||||||
|
ttag2
|
||||||
|
|
||||||
|
# 2. list tag names matching a regex
|
||||||
|
$ hledger -f - tags ttag
|
||||||
|
ttag
|
||||||
|
ttag2
|
||||||
|
|
||||||
|
# 3. list tag values
|
||||||
|
$ hledger -f - tags --values
|
||||||
|
bar
|
||||||
|
foo
|
||||||
|
qux
|
||||||
|
|
||||||
|
# 4. list values of tags matching a regex from transactions matching a query
|
||||||
|
$ hledger -f - tags --values ptag date:2000/1/1
|
||||||
|
bar
|
Loading…
Reference in New Issue
Block a user