diff --git a/cmd/edit.go b/cmd/edit.go index ed9f502..2fc3c4f 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -110,13 +110,38 @@ func inEditableDir(filepaths []string) (string, error) { } func copyTodoToDir(d string, filepaths []string) error { + inboxes := []string{} for _, target := range filepaths { p := path.Join(d, path.Base(target)) + if strings.Contains(path.Base(target), ".todo.") { + inboxes = append(inboxes, target) + continue + } if root, err := pttodo.NewRootFromFile(target); err != nil { return err } else if b, err := yaml.Marshal(root.Todo); err != nil { return err - } else if err := ioutil.WriteFile(p, b, os.ModePerm); err != nil { + } else if err := os.WriteFile(p, b, os.ModePerm); err != nil { + return err + } + } + for _, inbox := range inboxes { + target := path.Join(path.Dir(inbox), strings.Split(path.Base(inbox), ".todo.")[0]) + p := path.Join(d, path.Base(target)) + + root, err := pttodo.NewRootFromFile(p) + if err != nil { + return err + } + subroot, err := pttodo.NewRootFromFile(inbox) + if err != nil { + return err + } + root.MergeIn(subroot) + + if b, err := yaml.Marshal(root.Todo); err != nil { + return err + } else if err := os.WriteFile(p, b, os.ModePerm); err != nil { return err } }