flags pkg : but im not convinced this is right

This commit is contained in:
bth 2026-01-17 20:21:37 -08:00
commit f483e08105
4 changed files with 57 additions and 48 deletions

24
flags/flags.go Normal file
View file

@ -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
}

View file

@ -1,10 +1,23 @@
package sort package sort
import ( import (
"flag"
"fmt" "fmt"
"github.com/brtholomy/um/go/flags"
)
const (
key flags.Flag = "key"
) )
func Sort(args []string) { func Sort(args []string) {
fmt.Println("sort") sortFlags := flag.NewFlagSet("sort", flag.ExitOnError)
fmt.Println(args) 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()
} }

View file

@ -1,10 +1,26 @@
package tag package tag
import ( import (
"flag"
"fmt" "fmt"
"github.com/brtholomy/um/go/flags"
)
const (
query flags.Flag = "query"
invert flags.Flag = "invert"
) )
func Tag(args []string) { func Tag(args []string) {
fmt.Println("tag") tagFlags := flag.NewFlagSet("tag", flag.ExitOnError)
fmt.Println(args) 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()
} }

44
um.go
View file

@ -1,10 +1,8 @@
package main package main
import ( import (
"flag"
"fmt" "fmt"
"os" "os"
"strings"
nextpkg "github.com/brtholomy/um/go/next" nextpkg "github.com/brtholomy/um/go/next"
sortpkg "github.com/brtholomy/um/go/sort" 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) 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() { 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: // TODO: do something useful:
// run empty tag query? // run empty tag query?
if len(os.Args) < 2 { if len(os.Args) < 2 {
@ -70,20 +37,9 @@ func main() {
case last: case last:
nextpkg.Last() nextpkg.Last()
case tag: case tag:
// TODO: move flag defs to the package?
tagFlags.Parse(prependFlagToArgs(args, query))
tagpkg.Tag(args) 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: case sort:
sortFlags.Parse(args)
sortpkg.Sort(args) sortpkg.Sort(args)
fmt.Println("subcmd sort")
fmt.Printf("key: %#v\n", *sortKey)
fmt.Printf("args: %#v\n", sortFlags.Args())
sortFlags.Usage()
default: default:
fmt.Println(help) fmt.Println(help)
os.Exit(1) os.Exit(1)