Make PageUp and PageDown work
This commit is contained in:
parent
4dfe797467
commit
e0b348b941
@ -31,7 +31,7 @@ func (e *editor) ProcessKeypress() bool {
|
|||||||
var runes []rune
|
var runes []rune
|
||||||
|
|
||||||
// for ch, size := terminal.ReadKey(); size != 0; ch, size = terminal.ReadKey() {
|
// for ch, size := terminal.ReadKey(); size != 0; ch, size = terminal.ReadKey() {
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 4; i++ {
|
||||||
ch, size := terminal.ReadKey()
|
ch, size := terminal.ReadKey()
|
||||||
if size == 0 {
|
if size == 0 {
|
||||||
break
|
break
|
||||||
@ -45,9 +45,14 @@ func (e *editor) ProcessKeypress() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
runes = append(runes, ch)
|
runes = append(runes, ch)
|
||||||
|
|
||||||
|
// Break early for arrow keys
|
||||||
|
if i == 2 && ch >= 'A' && ch <= 'D' {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
terminal.Write("%v", runes)
|
// terminal.Write("%v", runes)
|
||||||
str := string(runes)
|
str := string(runes)
|
||||||
runes = runes[:0]
|
runes = runes[:0]
|
||||||
|
|
||||||
@ -56,7 +61,7 @@ func (e *editor) ProcessKeypress() bool {
|
|||||||
code := strings.TrimPrefix(str, terminal.EscPrefix)
|
code := strings.TrimPrefix(str, terminal.EscPrefix)
|
||||||
|
|
||||||
switch code {
|
switch code {
|
||||||
case KeyArrowUp, KeyArrowDown, KeyArrowLeft, KeyArrowRight:
|
case KeyArrowUp, KeyArrowDown, KeyArrowLeft, KeyArrowRight, KeyPageUp, KeyPageDown:
|
||||||
e.moveCursor(code)
|
e.moveCursor(code)
|
||||||
runes = runes[:0]
|
runes = runes[:0]
|
||||||
return true
|
return true
|
||||||
@ -69,17 +74,27 @@ func (e *editor) ProcessKeypress() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *editor) moveCursor (rawKey string) {
|
func (e *editor) moveCursor (key string) {
|
||||||
key := keyMap[rawKey]
|
|
||||||
|
|
||||||
switch key {
|
switch key {
|
||||||
case keyLeft:
|
case KeyArrowLeft:
|
||||||
e.cursor.x -= 1
|
if e.cursor.x != 0 {
|
||||||
case keyRight:
|
e.cursor.x -= 1
|
||||||
e.cursor.x += 1
|
}
|
||||||
case keyUp:
|
case KeyArrowRight:
|
||||||
e.cursor.y -= 1
|
if e.cursor.x != e.screen.Cols-1 {
|
||||||
case keyDown:
|
e.cursor.x += 1
|
||||||
e.cursor.y += 1
|
}
|
||||||
|
case KeyArrowUp:
|
||||||
|
if e.cursor.y != 0 {
|
||||||
|
e.cursor.y -= 1
|
||||||
|
}
|
||||||
|
case KeyArrowDown:
|
||||||
|
if e.cursor.y != e.screen.Rows-1 {
|
||||||
|
e.cursor.y += 1
|
||||||
|
}
|
||||||
|
case KeyPageUp:
|
||||||
|
e.cursor.y = 0
|
||||||
|
case KeyPageDown:
|
||||||
|
e.cursor.y = e.screen.Rows
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,6 +9,8 @@ const(
|
|||||||
KeyArrowDown = "B"
|
KeyArrowDown = "B"
|
||||||
KeyArrowRight = "C"
|
KeyArrowRight = "C"
|
||||||
KeyArrowLeft = "D"
|
KeyArrowLeft = "D"
|
||||||
|
KeyPageUp = "5~"
|
||||||
|
KeyPageDown = "6~"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -20,6 +22,8 @@ const (
|
|||||||
keyDown = '↓'
|
keyDown = '↓'
|
||||||
keyLeft = '←'
|
keyLeft = '←'
|
||||||
keyRight = '→'
|
keyRight = '→'
|
||||||
|
keyPageUp = '⭱'
|
||||||
|
keyPageDown = '⭳'
|
||||||
)
|
)
|
||||||
|
|
||||||
var keyMap = map[string]rune{
|
var keyMap = map[string]rune{
|
||||||
@ -27,4 +31,6 @@ var keyMap = map[string]rune{
|
|||||||
KeyArrowDown: keyDown,
|
KeyArrowDown: keyDown,
|
||||||
KeyArrowLeft: keyLeft,
|
KeyArrowLeft: keyLeft,
|
||||||
KeyArrowRight: keyRight,
|
KeyArrowRight: keyRight,
|
||||||
|
KeyPageUp: keyPageUp,
|
||||||
|
KeyPageDown: keyPageDown,
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user