aboutsummaryrefslogtreecommitdiff
path: root/editing.go
diff options
context:
space:
mode:
Diffstat (limited to 'editing.go')
-rw-r--r--editing.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/editing.go b/editing.go
new file mode 100644
index 0000000..9aead7a
--- /dev/null
+++ b/editing.go
@@ -0,0 +1,83 @@
+package main
+
+import (
+ "os"
+ "os/exec"
+
+ "github.com/charmbracelet/bubbles/textinput"
+ tea "github.com/charmbracelet/bubbletea"
+)
+
+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
+}
+
+func (m detailsModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+ var cmd tea.Cmd
+
+ switch msg := msg.(type) {
+ case tea.KeyMsg:
+ switch msg.Type {
+ case tea.KeyEnter:
+ return m, tea.Quit
+ case tea.KeyCtrlC, tea.KeyEsc:
+ return m, tea.Quit
+ }
+ }
+ m.ti, cmd = m.ti.Update(msg)
+ return m, cmd
+}
+
+func (m detailsModel) View() string {
+ out := "Enter snippet name\n"
+ out += m.ti.View()
+ return appStyle.Render(out)
+}
+
+func switchToDetails(returnTo tea.Model, snippet snippetDetails) (tea.Model, tea.Cmd) {
+ ti := textinput.New()
+ ti.Placeholder = "Snippet name"
+ ti.Focus()
+ ti.CharLimit = 250
+ ti.SetValue(snippet.name)
+
+ m := detailsModel{returnTo, snippet, ti}
+ return m, m.Init()
+}