diff --git a/.nanpa/editor.kdl b/.nanpa/editor.kdl new file mode 100644 index 0000000..e395cf2 --- /dev/null +++ b/.nanpa/editor.kdl @@ -0,0 +1 @@ +patch type="fixed" "default to nano and warn if no $EDITOR set" diff --git a/app/graffiti.go b/app/graffiti.go index 71e3713..8e4ae82 100644 --- a/app/graffiti.go +++ b/app/graffiti.go @@ -1,6 +1,8 @@ package app import ( + "bufio" + "fmt" "os" "os/exec" @@ -61,6 +63,17 @@ func (graffiti *Graffiti) Event(state *ui.State, event vaxis.Event) (processed b } func editGraffiti(state *ui.State) { + // if $EDITOR isn't set, warn about it, and use nano + editor := os.ExpandEnv(os.Getenv("EDITOR")) + if editor == "" { + editor = "nano" + state.Suspend() + fmt.Print("$EDITOR not found, using nano. press ↵ to continue") + input := bufio.NewScanner(os.Stdin) + input.Scan() + state.Resume() + } + state.HideCursor() vt := term.New() vt.TERM = os.Getenv("TERM") diff --git a/app/menu.go b/app/menu.go index f131025..e4985e4 100644 --- a/app/menu.go +++ b/app/menu.go @@ -1,6 +1,8 @@ package app import ( + "bufio" + "fmt" "os" "os/exec" "path" @@ -129,13 +131,24 @@ func showManpage(state *ui.State) { } func newFeels(state *ui.State) { + // if $EDITOR isn't set, warn about it, and use nano + editor := os.ExpandEnv(os.Getenv("EDITOR")) + if editor == "" { + editor = "nano" + state.Suspend() + fmt.Print("$EDITOR not found, using nano. press ↵ to continue") + input := bufio.NewScanner(os.Stdin) + input.Scan() + state.Resume() + } + state.HideCursor() vt := term.New() vt.TERM = os.Getenv("TERM") vt.Attach(state.PostEvent()) vt.Focus() now := time.Now() - err := vt.Start(exec.Command(os.ExpandEnv(os.Getenv("EDITOR")), path.Join(ttbp.PathUserEntries, now.Format("20060102")+".txt"))) + err := vt.Start(exec.Command(editor, path.Join(ttbp.PathUserEntries, now.Format("20060102")+".txt"))) if err != nil { panic(err) } diff --git a/ui/ui.go b/ui/ui.go index ce01b66..5d4a0be 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -83,3 +83,11 @@ func (state *State) HideCursor() { func (state *State) Window() vaxis.Window { return state.vx.Window() } + +func (state *State) Suspend() { + state.vx.Suspend() +} + +func (state *State) Resume() { + state.vx.Resume() +}