diff options
author | Aria <me@aria.rip> | 2023-02-03 12:14:41 +0000 |
---|---|---|
committer | Aria <me@aria.rip> | 2023-02-03 12:14:41 +0000 |
commit | a6c9dba25ad9204ebde302728eb2a75532497f37 (patch) | |
tree | a977882c817fb612511cdabce959d4de027c5b22 /editing.go |
initial commit
Diffstat (limited to 'editing.go')
-rw-r--r-- | editing.go | 83 |
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() +} |