package action // TODO: No more global settings, window-wide settings type WinOptions struct { // Number bool // Wrap bool // Relnumber bool } type Window struct { Id int Number int // Ignored for now, will be used when splits come into play Buffer *Buffer Cursor Position Anchor Position ScrollY int Width int Height int // Folds // TODO // Options WinOptions } // Not great, but maybe the best way var CurrentWindowId int = 1000 func NewEmptyWindow(lines []string, w, h int) *Window { win := &Window{ Id: CurrentWindowId, Number: 1, // Ignored for now Buffer: NewEmptyBuffer(lines), Cursor: Position{Line: 0, Col: 0}, Anchor: Position{Line: 0, Col: 0}, ScrollY: 0, Width: w, Height: h, } // Increment CurrentWindowId++ return win } func (w *Window) ClampCursorX() { lineLen := len(w.Buffer.Lines[w.Cursor.Line]) if lineLen == 0 { w.Cursor.Col = 0 } else if w.Cursor.Col >= lineLen { w.Cursor.Col = lineLen } }