wipper on edit.go
parent
caa9f9d6fd
commit
3549010ab4
62
cmd/edit.go
62
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 <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 {
|
||||
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 <Enter> 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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue