mirror of
https://github.com/itchyny/mmv.git
synced 2026-01-14 10:37:58 +08:00
implement editor rename
This commit is contained in:
parent
949c92af35
commit
4f29c7e2ed
3 changed files with 71 additions and 2 deletions
|
|
@ -1,10 +1,16 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/mattn/go-tty"
|
||||
|
||||
"github.com/itchyny/mmv"
|
||||
)
|
||||
|
|
@ -57,9 +63,58 @@ Options:
|
|||
fmt.Printf("usage: %s files ...\n", name)
|
||||
return exitCodeErr
|
||||
}
|
||||
if err := mmv.Rename(nil); err != nil {
|
||||
if err := rename(args); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s: %s\n", name, err)
|
||||
return exitCodeErr
|
||||
}
|
||||
return exitCodeOK
|
||||
}
|
||||
|
||||
func rename(args []string) error {
|
||||
f, err := ioutil.TempFile("", name+"-")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
f.Close()
|
||||
os.Remove(f.Name())
|
||||
}()
|
||||
for _, arg := range args {
|
||||
f.WriteString(arg)
|
||||
f.WriteString("\n")
|
||||
}
|
||||
editor := os.Getenv("EDITOR")
|
||||
if editor != "" {
|
||||
editor = "vi"
|
||||
}
|
||||
tty, err := tty.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tty.Close()
|
||||
cmd := exec.Command(editor, f.Name())
|
||||
cmd.Stdin = tty.Input()
|
||||
cmd.Stdout = tty.Output()
|
||||
cmd.Stderr = tty.Output()
|
||||
if err := cmd.Run(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := f.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
cnt, err := ioutil.ReadFile(f.Name())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
got := strings.Split(strings.TrimSpace(string(cnt)), "\n")
|
||||
if len(args) != len(got) {
|
||||
return errors.New("do not delete or add lines")
|
||||
}
|
||||
files := make(map[string]string, len(args))
|
||||
for i, src := range args {
|
||||
if dst := got[i]; src != dst {
|
||||
files[src] = dst
|
||||
}
|
||||
}
|
||||
return mmv.Rename(files)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue