aboutsummaryrefslogtreecommitdiff
path: root/editing.go
diff options
context:
space:
mode:
authorAria <me@aria.rip>2023-02-03 15:44:44 +0000
committerAria <me@aria.rip>2023-02-03 15:44:44 +0000
commit8c3b1aee5a253416523de78877ae03c3868cc62c (patch)
treef51e8d0049ad439bea7f4c32c714f4ce29e41e2c /editing.go
parenta6c9dba25ad9204ebde302728eb2a75532497f37 (diff)
first version
Diffstat (limited to 'editing.go')
-rw-r--r--editing.go106
1 files changed, 72 insertions, 34 deletions
diff --git a/editing.go b/editing.go
index 9aead7a..f5369d3 100644
--- a/editing.go
+++ b/editing.go
@@ -8,43 +8,19 @@ import (
tea "github.com/charmbracelet/bubbletea"
)
+type detailsModel struct {
+ returnTo tea.Model
+ validationMsg string
+ snippet snippetDetails
+ ti textinput.Model
+}
+
type snippetDetails struct {
name string
prevName string
contents string
}
-type VimFinishedMsg struct {
- snippet snippetDetails
- err error
-}
-
-func newItem() tea.Cmd {
- return editContents("#!/bin/sh", snippetDetails{})
-}
-
-func editContents(existingContents string, snippet snippetDetails) tea.Cmd {
- f, _ := os.CreateTemp("", "doe.sh")
- name := f.Name()
- f.WriteString(existingContents)
- f.Close()
-
- c := exec.Command("vim", f.Name())
-
- return tea.ExecProcess(c, func(err error) tea.Msg {
- contents, _ := os.ReadFile(name)
- snippet.contents = string(contents)
-
- return VimFinishedMsg{snippet, err}
- })
-}
-
-type detailsModel struct {
- returnTo tea.Model
- snippet snippetDetails
- ti textinput.Model
-}
-
func (m detailsModel) Init() tea.Cmd {
return nil
}
@@ -56,9 +32,16 @@ func (m detailsModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case tea.KeyMsg:
switch msg.Type {
case tea.KeyEnter:
- return m, tea.Quit
+ m.snippet.name = m.ti.Value()
+ if len(m.snippet.name) == 0 || len(m.snippet.name) > 250 {
+ m.validationMsg = "Name must be 0-250 characters"
+ return m, nil
+ }
+
+ return m.returnTo, tea.Batch(m.returnTo.Init(), saveSnippetCmd(m.snippet))
case tea.KeyCtrlC, tea.KeyEsc:
- return m, tea.Quit
+ // exit without saving
+ return m.returnTo, m.returnTo.Init()
}
}
m.ti, cmd = m.ti.Update(msg)
@@ -67,6 +50,7 @@ func (m detailsModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m detailsModel) View() string {
out := "Enter snippet name\n"
+ out += errorTextStyle.Render(m.validationMsg) + "\n"
out += m.ti.View()
return appStyle.Render(out)
}
@@ -78,6 +62,60 @@ func switchToDetails(returnTo tea.Model, snippet snippetDetails) (tea.Model, tea
ti.CharLimit = 250
ti.SetValue(snippet.name)
- m := detailsModel{returnTo, snippet, ti}
+ m := detailsModel{returnTo, "", snippet, ti}
return m, m.Init()
}
+
+func saveSnippetCmd(snippet snippetDetails) tea.Cmd {
+ return func() tea.Msg {
+ err := saveSnippet(snippet)
+ if err != nil {
+ panic(err)
+ }
+
+ return updateListMsg{}
+ }
+
+}
+
+type updateListMsg struct{}
+
+type vimFinishedMsg struct {
+ snippet snippetDetails
+ err error
+}
+
+func newItemCmd() tea.Cmd {
+ return editContentsCmd("", snippetDetails{})
+}
+
+func editItemCmd(item item) tea.Cmd {
+ return editContentsCmd(item.contents, snippetDetails{name: item.title, prevName: item.title, contents: item.contents})
+}
+
+func deleteItemCmd(item item) tea.Cmd {
+ return func() tea.Msg {
+ err := deleteItem(item)
+ if err != nil {
+ panic(err)
+ }
+
+ return updateListMsg{}
+ }
+}
+
+func editContentsCmd(existingContents string, snippet snippetDetails) tea.Cmd {
+ f, _ := os.CreateTemp("", "doe.sh")
+ name := f.Name()
+ f.WriteString(existingContents)
+ f.Close()
+
+ c := exec.Command("vim", f.Name())
+
+ return tea.ExecProcess(c, func(err error) tea.Msg {
+ contents, _ := os.ReadFile(name)
+ snippet.contents = string(contents)
+
+ return vimFinishedMsg{snippet, err}
+ })
+}