From f483e0810512ae456368fcc835d8f6fc46ed84d8 Mon Sep 17 00:00:00 2001 From: bth Date: Sat, 17 Jan 2026 20:21:37 -0800 Subject: [PATCH] flags pkg : but im not convinced this is right --- flags/flags.go | 24 ++++++++++++++++++++++++ sort/sort.go | 17 +++++++++++++++-- tag/tag.go | 20 ++++++++++++++++++-- um.go | 44 -------------------------------------------- 4 files changed, 57 insertions(+), 48 deletions(-) create mode 100644 flags/flags.go diff --git a/flags/flags.go b/flags/flags.go new file mode 100644 index 0000000..bd5e390 --- /dev/null +++ b/flags/flags.go @@ -0,0 +1,24 @@ +package flags + +import ( + "fmt" + "strings" +) + +type Flag string + +func (f Flag) Dash() string { + return fmt.Sprintf("--%s", f) +} + +// prepend --flag to args if a flag isn't there: +// allows trailing flags: +// um tag foo --invert +// becomes: +// um tag --query foo --invert +func PrependFlagToArgs(args []string, flag Flag) []string { + if len(args) >= 1 && !strings.HasPrefix(args[0], "-") { + args = append([]string{flag.Dash()}, args...) + } + return args +} diff --git a/sort/sort.go b/sort/sort.go index c6809af..5d9164f 100644 --- a/sort/sort.go +++ b/sort/sort.go @@ -1,10 +1,23 @@ package sort import ( + "flag" "fmt" + + "github.com/brtholomy/um/go/flags" +) + +const ( + key flags.Flag = "key" ) func Sort(args []string) { - fmt.Println("sort") - fmt.Println(args) + sortFlags := flag.NewFlagSet("sort", flag.ExitOnError) + sortKey := sortFlags.String(string(key), "", "filename of ordered list to use as key") + + sortFlags.Parse(args) + fmt.Println("subcmd sort") + fmt.Printf("key: %#v\n", *sortKey) + fmt.Printf("args: %#v\n", sortFlags.Args()) + sortFlags.Usage() } diff --git a/tag/tag.go b/tag/tag.go index 8e9d857..d8eda10 100644 --- a/tag/tag.go +++ b/tag/tag.go @@ -1,10 +1,26 @@ package tag import ( + "flag" "fmt" + + "github.com/brtholomy/um/go/flags" +) + +const ( + query flags.Flag = "query" + invert flags.Flag = "invert" ) func Tag(args []string) { - fmt.Println("tag") - fmt.Println(args) + tagFlags := flag.NewFlagSet("tag", flag.ExitOnError) + tagQuery := tagFlags.String(string(query), "", "tag query") + tagInvert := tagFlags.Bool(string(invert), false, "invert match") + + tagFlags.Parse(flags.PrependFlagToArgs(args, query)) + + fmt.Printf("query: %#v\n", *tagQuery) + fmt.Printf("invert: %#v\n", *tagInvert) + fmt.Printf("args: %#v\n", tagFlags.Args()) + tagFlags.Usage() } diff --git a/um.go b/um.go index 8697154..fcbbb36 100644 --- a/um.go +++ b/um.go @@ -1,10 +1,8 @@ package main import ( - "flag" "fmt" "os" - "strings" nextpkg "github.com/brtholomy/um/go/next" sortpkg "github.com/brtholomy/um/go/sort" @@ -22,38 +20,7 @@ const ( var help string = fmt.Sprintf("um [%s | %s | %s | %s]", tag, next, last, sort) -type Flag string - -const ( - query Flag = "query" - invert Flag = "invert" - key Flag = "key" -) - -func (f Flag) Dash() string { - return fmt.Sprintf("--%s", f) -} - -// prepend --flag to args if a flag isn't there: -// allows trailing flags: -// um tag foo --invert -// becomes: -// um tag --query foo --invert -func prependFlagToArgs(args []string, flag Flag) []string { - if len(args) >= 1 && !strings.HasPrefix(args[0], "-") { - args = append([]string{flag.Dash()}, args...) - } - return args -} - func main() { - tagFlags := flag.NewFlagSet(string(tag), flag.ExitOnError) - tagQuery := tagFlags.String(string(query), "", "tag query") - tagInvert := tagFlags.Bool(string(invert), false, "invert match") - - sortFlags := flag.NewFlagSet(string(sort), flag.ExitOnError) - sortKey := sortFlags.String(string(key), "", "filename of ordered list to use as key") - // TODO: do something useful: // run empty tag query? if len(os.Args) < 2 { @@ -70,20 +37,9 @@ func main() { case last: nextpkg.Last() case tag: - // TODO: move flag defs to the package? - tagFlags.Parse(prependFlagToArgs(args, query)) tagpkg.Tag(args) - fmt.Printf("query: %#v\n", *tagQuery) - fmt.Printf("invert: %#v\n", *tagInvert) - fmt.Printf("args: %#v\n", tagFlags.Args()) - tagFlags.Usage() case sort: - sortFlags.Parse(args) sortpkg.Sort(args) - fmt.Println("subcmd sort") - fmt.Printf("key: %#v\n", *sortKey) - fmt.Printf("args: %#v\n", sortFlags.Args()) - sortFlags.Usage() default: fmt.Println(help) os.Exit(1)