wipper on edit.go

This commit is contained in:
bel
2023-11-06 20:49:08 -07:00
parent caa9f9d6fd
commit 3549010ab4

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 {
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 return err
} }
for _, target := range filepaths() { editedFiles, err := listDir(editableDir)
for { if err != nil {
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 err
} }
return nil
}() for _, target := range editedFiles {
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
}
}
}
for _, target := range filepaths() {
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)