update.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package tui
  2. import (
  3. "charm.land/bubbles/v2/key"
  4. tea "charm.land/bubbletea/v2"
  5. )
  6. func (m EditorModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  7. switch msg := msg.(type) {
  8. case tea.WindowSizeMsg:
  9. m.Width = msg.Width
  10. m.Height = msg.Height
  11. m.Viewport.SetWidth(msg.Width)
  12. h := msg.Height - 2
  13. if h < 0 {
  14. h = 0
  15. }
  16. m.Viewport.SetHeight(h)
  17. return m, nil
  18. case tea.MouseWheelMsg:
  19. return m, nil
  20. case tea.KeyPressMsg:
  21. switch {
  22. case key.Matches(msg, m.Keymap.quit):
  23. return m, tea.Quit
  24. case key.Matches(msg, m.Keymap.left):
  25. m.Buffer.MoveHoriz(-1)
  26. case key.Matches(msg, m.Keymap.right):
  27. m.Buffer.MoveHoriz(1)
  28. case key.Matches(msg, m.Keymap.down):
  29. m.Buffer.MoveVert(1)
  30. case key.Matches(msg, m.Keymap.up):
  31. m.Buffer.MoveVert(-1)
  32. case key.Matches(msg, m.Keymap.cursorUp):
  33. m.Buffer.AddCursorVert(-1)
  34. case key.Matches(msg, m.Keymap.cursorDown):
  35. m.Buffer.AddCursorVert(1)
  36. case key.Matches(msg, m.Keymap.clearCursors):
  37. m.Buffer.ClearCursors()
  38. case key.Matches(msg, m.Keymap.newline):
  39. m.Buffer.Insert('\n')
  40. case key.Matches(msg, m.Keymap.delete):
  41. m.Buffer.Delete()
  42. default:
  43. key := msg.Key()
  44. if key.Text != "" {
  45. for _, r := range key.Text {
  46. m.Buffer.Insert(r)
  47. }
  48. }
  49. }
  50. m.Viewport.SetContent(m.renderedContent())
  51. return m, nil
  52. }
  53. return m, nil
  54. }