update.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package tui
  2. import (
  3. "github.com/gboncoffee/gopiecetable"
  4. tea "charm.land/bubbletea/v2"
  5. "charm.land/bubbles/v2/key"
  6. )
  7. func (m EditorModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  8. switch msg := msg.(type) {
  9. case tea.WindowSizeMsg:
  10. m.Width = msg.Width
  11. m.Height = msg.Height
  12. m.Viewport.SetWidth(msg.Width)
  13. h := msg.Height - 2
  14. if h < 0 {
  15. h = 0
  16. }
  17. m.Viewport.SetHeight(h)
  18. return m, nil
  19. case tea.KeyPressMsg:
  20. switch {
  21. case key.Matches(msg, m.Keymap.quit):
  22. return m, tea.Quit
  23. case key.Matches(msg, m.Keymap.newline):
  24. m.Buffer.Insert('\n')
  25. case key.Matches(msg, m.Keymap.delete):
  26. m.Buffer.Delete()
  27. case key.Matches(msg, m.Keymap.undo):
  28. m.Buffer.Undo()
  29. case key.Matches(msg, m.Keymap.redo):
  30. m.Buffer.Table.Redo()
  31. default:
  32. key := msg.Key()
  33. if key.Text != "" {
  34. for _, r := range key.Text {
  35. //_ = m.Buffer.Table.Insert(m.Buffer.Table.Size(), r)
  36. m.Buffer.Insert(r)
  37. }
  38. }
  39. }
  40. m.Viewport.SetContent(gopiecetable.String(m.Buffer.Table))
  41. }
  42. return m, nil
  43. }