feat: settings abstraction supports numbers
This commit is contained in:
parent
be46cae73d
commit
d5f0f2413a
@ -1,7 +1,20 @@
|
|||||||
package action
|
package action
|
||||||
|
|
||||||
type Settings struct {
|
type Settings struct {
|
||||||
|
Number bool
|
||||||
|
RelativeNumber bool
|
||||||
GutterSize int
|
GutterSize int
|
||||||
TabSize int
|
TabSize int
|
||||||
ScrollOff int
|
ScrollOff int
|
||||||
|
// TODO: Colors
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDefaultSettings() Settings {
|
||||||
|
return Settings{
|
||||||
|
Number: true,
|
||||||
|
RelativeNumber: true,
|
||||||
|
GutterSize: 5,
|
||||||
|
TabSize: 2,
|
||||||
|
ScrollOff: 8,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,11 +44,7 @@ func NewModel(lines []string, pos action.Position) Model {
|
|||||||
mode: action.NormalMode,
|
mode: action.NormalMode,
|
||||||
command: "",
|
command: "",
|
||||||
input: input.NewHandler(),
|
input: input.NewHandler(),
|
||||||
settings: action.Settings{
|
settings: action.NewDefaultSettings(),
|
||||||
GutterSize: 5,
|
|
||||||
TabSize: 2,
|
|
||||||
ScrollOff: 8,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -67,11 +67,15 @@ func (m Model) View() string {
|
|||||||
|
|
||||||
if i < m.LineCount() {
|
if i < m.LineCount() {
|
||||||
|
|
||||||
|
if m.Settings().Number || m.Settings().RelativeNumber {
|
||||||
var (
|
var (
|
||||||
gutter string
|
gutter string
|
||||||
currentLine bool = false
|
currentLine bool = false
|
||||||
lineNumber int
|
lineNumber int
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if m.Settings().RelativeNumber {
|
||||||
|
// Relative line numbers: show distance from cursor, current line shows absolute
|
||||||
if i > m.CursorY() {
|
if i > m.CursorY() {
|
||||||
lineNumber = i - m.CursorY()
|
lineNumber = i - m.CursorY()
|
||||||
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
||||||
@ -79,15 +83,23 @@ func (m Model) View() string {
|
|||||||
lineNumber = m.CursorY() - i
|
lineNumber = m.CursorY() - i
|
||||||
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
||||||
} else {
|
} else {
|
||||||
lineNumber = i + 1
|
// Current line: show absolute number if Number is also set, otherwise show 0
|
||||||
currentLine = true
|
currentLine = true
|
||||||
if lineNumber < 100 {
|
if m.Settings().Number {
|
||||||
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-2, lineNumber)
|
lineNumber = i + 1
|
||||||
|
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
||||||
} else {
|
} else {
|
||||||
|
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if m.Settings().Number {
|
||||||
|
// Absolute line numbers only
|
||||||
|
lineNumber = i + 1
|
||||||
|
currentLine = (i == m.CursorY())
|
||||||
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
gutter = fmt.Sprintf("%*d ", m.Settings().GutterSize-1, lineNumber)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
view.WriteString(m.gutterStyle(currentLine).Render(gutter))
|
view.WriteString(m.gutterStyle(currentLine).Render(gutter))
|
||||||
|
}
|
||||||
|
|
||||||
runes := []rune(m.Line(i))
|
runes := []rune(m.Line(i))
|
||||||
for x := 0; x <= len(runes); x++ {
|
for x := 0; x <= len(runes); x++ {
|
||||||
@ -111,8 +123,13 @@ func (m Model) View() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// Empty lines beyond file content
|
||||||
|
if m.Settings().Number || m.Settings().RelativeNumber {
|
||||||
format := fmt.Sprintf("%%-%ds ", m.Settings().GutterSize-1)
|
format := fmt.Sprintf("%%-%ds ", m.Settings().GutterSize-1)
|
||||||
fmt.Fprintf(&view, format, "~")
|
fmt.Fprintf(&view, format, "~")
|
||||||
|
} else {
|
||||||
|
view.WriteString("~")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
view.WriteString("\n")
|
view.WriteString("\n")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user