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 {
|
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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue