support tag, simple case insensitve search when recursing
parent
031db8788b
commit
af0f094a65
|
|
@ -11,6 +11,7 @@ import (
|
|||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
|
|
@ -28,6 +29,8 @@ func _main() error {
|
|||
defaultFilepath = "-"
|
||||
}
|
||||
filepath := flag.String("f", defaultFilepath, "($PTTODO_FILE) path to yaml file")
|
||||
tags := flag.String("tags", "", "csv of all tags to find")
|
||||
search := flag.String("search", "", "fts case insensitive")
|
||||
e := flag.Bool("e", false, "edit file")
|
||||
dry := flag.Bool("dry", false, "dry run")
|
||||
flag.Parse()
|
||||
|
|
@ -36,7 +39,11 @@ func _main() error {
|
|||
return err
|
||||
}
|
||||
}
|
||||
return dump(*dry, os.Stdout, *filepath)
|
||||
var tagslist []string
|
||||
if *tags != "" {
|
||||
tagslist = strings.Split(*tags, ",")
|
||||
}
|
||||
return dump(*dry, os.Stdout, *filepath, flag.Arg(0), tagslist, *search)
|
||||
}
|
||||
|
||||
func edit(dry bool, filepath string) error {
|
||||
|
|
@ -100,7 +107,7 @@ func edit(dry bool, filepath string) error {
|
|||
return nil
|
||||
}
|
||||
verify := func() error {
|
||||
if err := dump(true, io.Discard, tempFile); err != nil {
|
||||
if err := dump(true, io.Discard, tempFile, "", nil, ""); err != nil {
|
||||
return fmt.Errorf("failed to verify %s: %v", tempFile, err)
|
||||
}
|
||||
return nil
|
||||
|
|
@ -125,7 +132,7 @@ func edit(dry bool, filepath string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func dump(dry bool, writer io.Writer, filepath string) error {
|
||||
func dump(dry bool, writer io.Writer, filepath, recurse string, tags []string, search string) error {
|
||||
var reader io.Reader
|
||||
if filepath == "-" {
|
||||
reader = os.Stdin
|
||||
|
|
@ -149,7 +156,7 @@ func dump(dry bool, writer io.Writer, filepath string) error {
|
|||
root.MoveScheduledToTodo()
|
||||
|
||||
var v interface{} = root
|
||||
switch flag.Arg(0) {
|
||||
switch recurse {
|
||||
case "":
|
||||
case "todo":
|
||||
v = root.Todo
|
||||
|
|
@ -158,6 +165,31 @@ func dump(dry bool, writer io.Writer, filepath string) error {
|
|||
case "done":
|
||||
v = root.Done
|
||||
}
|
||||
if todos, ok := v.([]pttodo.Todo); ok {
|
||||
if len(tags) > 0 {
|
||||
result := make([]pttodo.Todo, 0, len(todos))
|
||||
for _, todo := range todos {
|
||||
want := len(todo.Tags) > 0
|
||||
for _, tag := range tags {
|
||||
want = want && strings.Contains(todo.Tags, tag)
|
||||
}
|
||||
if want {
|
||||
result = append(result, todo)
|
||||
}
|
||||
}
|
||||
todos = result
|
||||
}
|
||||
if len(search) > 0 {
|
||||
result := make([]pttodo.Todo, 0, len(todos))
|
||||
for _, todo := range todos {
|
||||
if strings.Contains(strings.ToLower(fmt.Sprint(todo)), strings.ToLower(search)) {
|
||||
result = append(result, todo)
|
||||
}
|
||||
}
|
||||
todos = result
|
||||
}
|
||||
v = todos
|
||||
}
|
||||
b2, err := yaml.Marshal(v)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ todo:
|
|||
details: |
|
||||
- if it's a web ui hook or somethin, then it'd only have file conflict if I modify without waiting
|
||||
- but thats a step back from current todo solution
|
||||
tags: stuffToTry,secondTag
|
||||
- todo: ez edit on many platforms, even offline and mobile
|
||||
ts: Fri Dec 31 22:33:12 EST 2021
|
||||
details: |
|
||||
|
|
|
|||
Loading…
Reference in New Issue