From 3549010ab4056f32a04994174c90e907b27f0ac0 Mon Sep 17 00:00:00 2001 From: bel Date: Mon, 6 Nov 2023 20:49:08 -0700 Subject: [PATCH] wipper on edit.go --- cmd/edit.go | 62 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/cmd/edit.go b/cmd/edit.go index f2e6c32..ca93ab1 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -25,39 +25,32 @@ func edit(config *config) error { } func _edit(filepaths func() []string) error { - editableDir, err := inEditableDir(filepaths()) + editableDir, err := inEditableDirAsTodos(filepaths()) if err != nil { return err } - if err := vimd(editableDir); err != nil { - return err - } - for _, target := range filepaths() { - for { - err := func() error { - var todos []pttodo.Todo - if r, err := filePathReader(path.Join(editableDir, path.Base(target))); err != nil { - return err - } else if err := yaml.NewDecoder(r).Decode(&todos); err != nil { - return err - } - return nil - }() - if err == nil { - break - } - log.Printf("%s, press to resume editing", err) - b := make([]byte, 1) - if _, err := os.Stdin.Read(b); err != nil { - return err - } - if err := vimd(editableDir); err != nil { + if err := modifyEditableDir(editableDir, func() error { + files, err := listDir(editableDir) + if err != nil { + return err + } + for _, p := range files { + if _, err := pttodo.NewTodosFromFile(p); err != nil { return err } } + return nil + }); err != nil { + return err } - for _, target := range filepaths() { + + editedFiles, err := listDir(editableDir) + if err != nil { + return err + } + + for _, target := range editedFiles { r, err := filePathReader(path.Join(editableDir, path.Base(target))) if err != nil { return err @@ -101,7 +94,7 @@ func _edit(filepaths func() []string) error { return nil } -func inEditableDir(filepaths []string) (string, error) { +func inEditableDirAsTodos(filepaths []string) (string, error) { tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo-*") if err != nil { return "", err @@ -148,6 +141,23 @@ func copyTodoToDir(d string, filepaths []string) error { return nil } +func modifyEditableDir(d string, check func() error) error { + for { + if err := vimd(d); err != nil { + return err + } + err := check() + if err == nil { + return nil + } + log.Printf("%s, press to resume editing", err) + b := make([]byte, 1) + if _, err := os.Stdin.Read(b); err != nil { + return err + } + } +} + func vimd(d string) error { bin := "vim" editorbin, err := exec.LookPath(bin)