diff --git a/internal/action/action.go b/internal/action/action.go index 5a58665..829652c 100644 --- a/internal/action/action.go +++ b/internal/action/action.go @@ -1,6 +1,8 @@ package action -import tea "github.com/charmbracelet/bubbletea" +import ( + tea "github.com/charmbracelet/bubbletea" +) // Mode constants for editor mode type Mode int @@ -46,8 +48,7 @@ type Model interface { SetInsertKeys(keys []string) // Settings - TabSize() int - ScrollOff() int + Settings() Settings // Mode Mode() Mode diff --git a/internal/action/insert.go b/internal/action/insert.go index 8b8f69f..50d48ed 100644 --- a/internal/action/insert.go +++ b/internal/action/insert.go @@ -204,7 +204,7 @@ type InsertTab struct{} func (a InsertTab) Execute(m Model) tea.Cmd { x, y := m.CursorX(), m.CursorY() l := m.Line(y) - tabs := strings.Repeat(" ", m.TabSize()) + tabs := strings.Repeat(" ", m.Settings().TabSize) if x < len(l) { m.SetLine(y, l[:x]+tabs+l[x:]) } else { diff --git a/internal/action/settings.go b/internal/action/settings.go new file mode 100644 index 0000000..448d985 --- /dev/null +++ b/internal/action/settings.go @@ -0,0 +1,7 @@ +package action + +type Settings struct { + GutterSize int + TabSize int + ScrollOff int +} diff --git a/internal/editor/model.go b/internal/editor/model.go index 880a590..05ed664 100644 --- a/internal/editor/model.go +++ b/internal/editor/model.go @@ -30,9 +30,7 @@ type Model struct { insertAction action.Action // Settings - gutterSize int - tabSize int - scrollOff int + settings action.Settings } func NewModel(lines []string, pos action.Position) Model { @@ -46,10 +44,11 @@ func NewModel(lines []string, pos action.Position) Model { mode: action.NormalMode, command: "", input: input.NewHandler(), - - gutterSize: 5, - tabSize: 2, - scrollOff: 8, + settings: action.Settings{ + GutterSize: 5, + TabSize: 2, + ScrollOff: 8, + }, } } @@ -139,12 +138,8 @@ func (m *Model) SetInsertKeys(keys []string) { } // Settings -func (m *Model) TabSize() int { - return m.tabSize -} - -func (m *Model) ScrollOff() int { - return m.scrollOff +func (m *Model) Settings() action.Settings { + return m.settings } // Window @@ -174,7 +169,7 @@ func (m *Model) AdjustScroll() { } // Effective scrollOff (can't be more than half the viewport) - off := min(m.ScrollOff(), viewportHeight/2) + off := min(m.Settings().ScrollOff, viewportHeight/2) // Cursor too close to top — scroll up if m.CursorY() < m.ScrollY()+off { @@ -290,7 +285,7 @@ func (m *Model) processInsertKey(key string) { } case "tab": - tabs := strings.Repeat(" ", m.tabSize) + tabs := strings.Repeat(" ", m.Settings().TabSize) if x < len(l) { m.SetLine(y, l[:x]+tabs+l[x:]) } else { diff --git a/internal/editor/style.go b/internal/editor/style.go index 749a9ca..8ad7e21 100644 --- a/internal/editor/style.go +++ b/internal/editor/style.go @@ -36,7 +36,7 @@ func (m Model) gutterStyle(currentLine bool) lipgloss.Style { fg = lipgloss.Color("#d69d00") } return lipgloss.NewStyle(). - Width(m.gutterSize). + Width(m.Settings().GutterSize). Background(bg). Foreground(fg) } diff --git a/internal/editor/view.go b/internal/editor/view.go index be12617..44ea54b 100644 --- a/internal/editor/view.go +++ b/internal/editor/view.go @@ -74,17 +74,17 @@ func (m Model) View() string { ) if i > m.CursorY() { lineNumber = i - m.CursorY() - gutter = fmt.Sprintf("%*d ", m.gutterSize-1, lineNumber) + gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber) } else if i < m.CursorY() { lineNumber = m.CursorY() - i - gutter = fmt.Sprintf("%*d ", m.gutterSize-1, lineNumber) + gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber) } else { lineNumber = i + 1 currentLine = true if lineNumber < 100 { - gutter = fmt.Sprintf("%*d ", m.gutterSize-2, lineNumber) + gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-2, lineNumber) } else { - gutter = fmt.Sprintf("%*d ", m.gutterSize-1, lineNumber) + gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber) } } view.WriteString(m.gutterStyle(currentLine).Render(gutter)) @@ -111,7 +111,7 @@ func (m Model) View() string { } } } else { - format := fmt.Sprintf("%%-%ds ", m.gutterSize-1) + format := fmt.Sprintf("%%-%ds ", m.Settings().GutterSize-1) fmt.Fprintf(&view, format, "~") }