Basic scrolling up or down a file
All checks were successful
timw4mail/gilo/pipeline/head This commit looks good
All checks were successful
timw4mail/gilo/pipeline/head This commit looks good
This commit is contained in:
parent
2203e30b18
commit
cef024bb30
@ -12,6 +12,8 @@ import (
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
func (e *editor) RefreshScreen() {
|
func (e *editor) RefreshScreen() {
|
||||||
|
e.scroll()
|
||||||
|
|
||||||
ab := newBuffer()
|
ab := newBuffer()
|
||||||
|
|
||||||
ab.append(terminal.HideCursor)
|
ab.append(terminal.HideCursor)
|
||||||
@ -25,12 +27,24 @@ func (e *editor) RefreshScreen() {
|
|||||||
terminal.Write(ab.toString())
|
terminal.Write(ab.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *editor) scroll() {
|
||||||
|
if e.cursor.y < e.offset.y {
|
||||||
|
e.offset.y = e.cursor.y
|
||||||
|
}
|
||||||
|
|
||||||
|
if e.cursor.y >= e.offset.y + e.screen.Rows {
|
||||||
|
e.offset.y = e.cursor.y - e.screen.Rows + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (e *editor) drawRows(ab *buffer) {
|
func (e *editor) drawRows(ab *buffer) {
|
||||||
for y :=0; y < e.screen.Rows; y++ {
|
for y :=0; y < e.screen.Rows; y++ {
|
||||||
if y >= len(e.rows) {
|
fileRow := y + e.offset.y
|
||||||
|
|
||||||
|
if fileRow >= len(e.rows) {
|
||||||
e.drawPlaceholderRow(y, ab)
|
e.drawPlaceholderRow(y, ab)
|
||||||
} else {
|
} else {
|
||||||
row := truncateString(string(e.rows[y].chars), e.screen.Cols)
|
row := truncateString(string(e.rows[fileRow].chars), e.screen.Cols)
|
||||||
ab.append(row)
|
ab.append(row)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,23 +11,30 @@ import (
|
|||||||
// !Editor
|
// !Editor
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
type cursor struct {
|
type point struct {
|
||||||
x int
|
x int
|
||||||
y int
|
y int
|
||||||
}
|
}
|
||||||
|
|
||||||
type editor struct {
|
type editor struct {
|
||||||
screen *terminal.Screen
|
screen *terminal.Screen
|
||||||
cursor *cursor
|
cursor *point
|
||||||
|
offset *point
|
||||||
rows []*row
|
rows []*row
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() *editor {
|
func New() *editor {
|
||||||
screen := terminal.Size()
|
screen := terminal.Size()
|
||||||
cursor := &cursor { 0, 0 }
|
cursor := &point { 0, 0 }
|
||||||
|
offset := &point { 0, 0 }
|
||||||
var rows []*row
|
var rows []*row
|
||||||
|
|
||||||
return &editor{screen, cursor, rows }
|
return &editor{
|
||||||
|
screen,
|
||||||
|
cursor,
|
||||||
|
offset,
|
||||||
|
rows,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *editor) Open(filename string) {
|
func (e *editor) Open(filename string) {
|
||||||
@ -92,7 +99,7 @@ func (e *editor) moveCursor (key string) {
|
|||||||
e.cursor.y -= 1
|
e.cursor.y -= 1
|
||||||
}
|
}
|
||||||
case keyDown:
|
case keyDown:
|
||||||
if e.cursor.y != e.screen.Rows-1 {
|
if e.cursor.y < len(e.rows) {
|
||||||
e.cursor.y += 1
|
e.cursor.y += 1
|
||||||
}
|
}
|
||||||
case keyPageUp:
|
case keyPageUp:
|
||||||
@ -106,6 +113,11 @@ func (e *editor) moveCursor (key string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *editor) appendRow(s string) {
|
||||||
|
newRow := NewRow(s)
|
||||||
|
e.rows = append(e.rows, newRow)
|
||||||
|
}
|
||||||
|
|
||||||
// Convert the raw ANSI escape sequences to the type of key input
|
// Convert the raw ANSI escape sequences to the type of key input
|
||||||
func parseEscapeSequence () string {
|
func parseEscapeSequence () string {
|
||||||
var runes []rune
|
var runes []rune
|
||||||
@ -169,8 +181,3 @@ func parseEscapeSequence () string {
|
|||||||
|
|
||||||
return string('\x1b')
|
return string('\x1b')
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *editor) appendRow(s string) {
|
|
||||||
newRow := NewRow(s)
|
|
||||||
e.rows = append(e.rows, newRow)
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user