model.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package tui
  2. import (
  3. "moose/internal/buffer"
  4. "github.com/gboncoffee/gopiecetable"
  5. tea "charm.land/bubbletea/v2"
  6. "charm.land/bubbles/v2/key"
  7. "charm.land/bubbles/v2/viewport"
  8. )
  9. type Keymap = struct {
  10. left, right, up, down, tab, backtab, newline, delete, undo, redo, quit key.Binding
  11. }
  12. func (m *EditorModel) updateKeybindings() {
  13. }
  14. type EditorModel struct {
  15. Buffer buffer.Buffer
  16. Viewport viewport.Model
  17. Keymap Keymap
  18. Width int
  19. Height int
  20. }
  21. func NewEditorModel() EditorModel {
  22. initialBuf := buffer.Buffer{
  23. Table: gopiecetable.FromString(""),
  24. CM: buffer.CursorManager{
  25. Cursors: []buffer.Cursor{{Offset: 0}},
  26. PrimaryIdx: 0,
  27. },
  28. }
  29. vp := viewport.New()
  30. vp.SetContent(gopiecetable.String(initialBuf.Table))
  31. return EditorModel{
  32. Buffer: initialBuf,
  33. Viewport: vp,
  34. Keymap: Keymap{
  35. left: key.NewBinding(
  36. key.WithKeys("left"),
  37. ),
  38. right: key.NewBinding(
  39. key.WithKeys("right"),
  40. ),
  41. up: key.NewBinding(
  42. key.WithKeys("up"),
  43. ),
  44. down: key.NewBinding(
  45. key.WithKeys("down"),
  46. ),
  47. tab: key.NewBinding(
  48. key.WithKeys("tab"),
  49. ),
  50. backtab: key.NewBinding(
  51. key.WithKeys("shift+tab"),
  52. ),
  53. delete: key.NewBinding(
  54. key.WithKeys("backspace"),
  55. ),
  56. newline: key.NewBinding(
  57. key.WithKeys("enter"),
  58. ),
  59. undo: key.NewBinding(
  60. key.WithKeys("ctrl+z"),
  61. ),
  62. redo: key.NewBinding(
  63. key.WithKeys("ctrl+y"),
  64. ),
  65. quit: key.NewBinding(
  66. key.WithKeys("ctrl+c"),
  67. ),
  68. },
  69. }
  70. }
  71. func (m EditorModel) Init() tea.Cmd {
  72. return nil
  73. }
  74. func (m EditorModel) View() tea.View {
  75. v := tea.NewView(m.Viewport.View())
  76. v.AltScreen = true
  77. return v
  78. }