wipper on edit.go

master
bel 2023-11-06 20:49:08 -07:00
parent caa9f9d6fd
commit 3549010ab4
1 changed files with 36 additions and 26 deletions

View File

@ -25,39 +25,32 @@ func edit(config *config) error {
} }
func _edit(filepaths func() []string) error { func _edit(filepaths func() []string) error {
editableDir, err := inEditableDir(filepaths()) editableDir, err := inEditableDirAsTodos(filepaths())
if err != nil { if err != nil {
return err return err
} }
if err := vimd(editableDir); err != nil {
return err
}
for _, target := range filepaths() { if err := modifyEditableDir(editableDir, func() error {
for { files, err := listDir(editableDir)
err := func() error { if err != nil {
var todos []pttodo.Todo return err
if r, err := filePathReader(path.Join(editableDir, path.Base(target))); err != nil { }
return err for _, p := range files {
} else if err := yaml.NewDecoder(r).Decode(&todos); err != nil { if _, err := pttodo.NewTodosFromFile(p); err != nil {
return err
}
return nil
}()
if err == nil {
break
}
log.Printf("%s, press <Enter> to resume editing", err)
b := make([]byte, 1)
if _, err := os.Stdin.Read(b); err != nil {
return err
}
if err := vimd(editableDir); err != nil {
return err 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))) r, err := filePathReader(path.Join(editableDir, path.Base(target)))
if err != nil { if err != nil {
return err return err
@ -101,7 +94,7 @@ func _edit(filepaths func() []string) error {
return nil return nil
} }
func inEditableDir(filepaths []string) (string, error) { func inEditableDirAsTodos(filepaths []string) (string, error) {
tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo-*") tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo-*")
if err != nil { if err != nil {
return "", err return "", err
@ -148,6 +141,23 @@ func copyTodoToDir(d string, filepaths []string) error {
return nil 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 <Enter> to resume editing", err)
b := make([]byte, 1)
if _, err := os.Stdin.Read(b); err != nil {
return err
}
}
}
func vimd(d string) error { func vimd(d string) error {
bin := "vim" bin := "vim"
editorbin, err := exec.LookPath(bin) editorbin, err := exec.LookPath(bin)