From e25d52b141c775c8d61ee0b938c81f33d8907e52 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Thu, 12 Dec 2024 22:33:21 -0700 Subject: [PATCH] prettier printing --- cmd/cli/config.go | 1 + cmd/cli/main.go | 20 +++++++++++++++----- src/ledger/like.go | 9 ++++++--- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cmd/cli/config.go b/cmd/cli/config.go index 1189989..f1c12d5 100644 --- a/cmd/cli/config.go +++ b/cmd/cli/config.go @@ -7,5 +7,6 @@ type Config struct { Sort string NoRounding bool Depth int + Reverse bool } } diff --git a/cmd/cli/main.go b/cmd/cli/main.go index f420e7a..203f1d7 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -19,6 +19,7 @@ func Main() { fs.StringVar(&config.Query.Sort, "S", "", "sort ie date") fs.BoolVar(&config.Query.NoRounding, "no-rounding", false, "no rounding") fs.IntVar(&config.Query.Depth, "depth", 0, "depth grouping") + fs.BoolVar(&config.Query.Reverse, "r", false, "reverse printed accounts") if err := fs.Parse(os.Args[1:]); err != nil { panic(err) } @@ -86,31 +87,40 @@ func Main() { balances = balances.NotLike(notLikePattern) } - FPrintBalances(os.Stdout, balances) + FPrintBalances(os.Stdout, "", balances) case "reg": transactions := deltas.Transactions() likes := []ledger.Like{} if likePattern != "" { like := ledger.LikeName(likePattern) transactions = transactions.Like(like) + if config.Query.Reverse { + like = ledger.LikeNot(like) + } likes = append(likes, like) } if notLikePattern != "" { like := ledger.NotLikeName(notLikePattern) transactions = transactions.NotLike(like) + if config.Query.Reverse { + like = ledger.LikeNot(like) + } likes = append(likes, like) } for _, transaction := range transactions { - fmt.Println(transaction[0].Date) - FPrintBalances(os.Stdout, ledger.Deltas(transaction).Like(likes...).Balances()) + balances := ledger.Deltas(transaction).Like(likes...).Balances() + if len(balances) > 0 { + fmt.Printf("%s\t%s\n", transaction[0].Date, transaction[0].Description) + FPrintBalances(os.Stdout, "\t\t", ledger.Deltas(transaction).Like(likes...).Balances()) + } } default: panic("unknown command " + positional[0]) } } -func FPrintBalances(w io.Writer, balances ledger.Balances) { +func FPrintBalances(w io.Writer, linePrefix string, balances ledger.Balances) { keys := []string{} for k := range balances { keys = append(keys, k) @@ -124,7 +134,7 @@ func FPrintBalances(w io.Writer, balances ledger.Balances) { } } - format := fmt.Sprintf("%%-%ds\t%%s%%.2f\n", max) + format := fmt.Sprintf("%s%%-%ds\t%%s%%.2f\n", linePrefix, max) for _, key := range keys { currencies := []ledger.Currency{} for currency := range balances[key] { diff --git a/src/ledger/like.go b/src/ledger/like.go index c2fe36f..0a71d45 100644 --- a/src/ledger/like.go +++ b/src/ledger/like.go @@ -41,13 +41,16 @@ func LikeNotName(pattern string) Like { } } -func NotLikeName(pattern string) Like { - foo := LikeName(pattern) +func LikeNot(like Like) Like { return func(d Delta) bool { - return !foo(d) + return !like(d) } } +func NotLikeName(pattern string) Like { + return LikeNot(LikeName(pattern)) +} + func LikeName(pattern string) Like { return func(d Delta) bool { return like(pattern, d.Name)