The tests are starting to get messy, lots of duplication. Going to resolve that. Lots of this is due to AI generation of tests.
84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
package editor
|
|
|
|
import (
|
|
"git.gophernest.net/azpect/TextEditor/internal/core"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
)
|
|
|
|
// Model.Update: Handles BubbleTea messages including window resizes and key
|
|
// presses. Routes input to the handler and adjusts scroll after updates.
|
|
func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
var cmd tea.Cmd
|
|
|
|
switch msg := msg.(type) {
|
|
|
|
case tea.WindowSizeMsg:
|
|
m.termHeight = msg.Height
|
|
m.termWidth = msg.Width
|
|
|
|
// TODO: Implement a layout method that handles this
|
|
//
|
|
// func (m *Model) layoutWindows() {
|
|
// if len(m.windows) == 0 {
|
|
// return
|
|
// }
|
|
//
|
|
// if len(m.windows) == 1 {
|
|
// // Single window - full screen
|
|
// m.windows[0].Width = m.termWidth
|
|
// m.windows[0].Height = m.termHeight
|
|
// return
|
|
// }
|
|
//
|
|
// // Multiple windows - distribute space
|
|
// // This is where you'd implement split layout logic
|
|
// // For example, horizontal split:
|
|
// halfHeight := m.termHeight / 2
|
|
// for i, win := range m.windows {
|
|
// win.Width = m.termWidth
|
|
// if i < len(m.windows)-1 {
|
|
// win.Height = halfHeight
|
|
// } else {
|
|
// // Last window gets remainder
|
|
// win.Height = m.termHeight - (halfHeight * (len(m.windows) - 1))
|
|
// }
|
|
// }
|
|
// }
|
|
for i := range m.windows {
|
|
m.windows[i].Height = msg.Height
|
|
m.windows[i].Width = msg.Width
|
|
}
|
|
|
|
case tea.KeyMsg:
|
|
// TODO: This needs to be removed, but for now its required for the tests.
|
|
// Ctrl+C always quits regardless of mode
|
|
if msg.Type == tea.KeyCtrlC {
|
|
return m, tea.Quit
|
|
}
|
|
|
|
// TODO: This is not great
|
|
// TODO: Any vim action should exit also
|
|
// Simple override for command output mode for now
|
|
if m.Mode() == core.CommandOutputMode {
|
|
// TODO: Implement g/G/d/u
|
|
switch msg.String() {
|
|
case "enter":
|
|
m.SetMode(core.NormalMode)
|
|
m.SetCommandOutput(&core.CommandOutput{})
|
|
case "j":
|
|
m.CommandOutput().ScrollDown(m.termHeight)
|
|
case "k":
|
|
m.CommandOutput().ScrollUp()
|
|
}
|
|
} else {
|
|
cmd = m.input.Handle(m, msg.String())
|
|
}
|
|
}
|
|
|
|
// Keep cursor in view after any update
|
|
win := m.ActiveWindow()
|
|
win.AdjustScroll()
|
|
|
|
return m, cmd
|
|
}
|