mirror of https://github.com/liamg/aminal.git
fixed top
This commit is contained in:
parent
006e6d53ea
commit
702811507e
|
@ -52,6 +52,7 @@ func (cell *Cell) SetRune(r rune) {
|
|||
return
|
||||
}
|
||||
if cell.text != nil {
|
||||
cell.text.SetColor(mgl32.Vec3{cell.fgColour[0], cell.fgColour[1], cell.fgColour[2]})
|
||||
if r == '%' {
|
||||
cell.text.SetString("%%")
|
||||
} else {
|
||||
|
@ -64,7 +65,6 @@ func (cell *Cell) SetRune(r rune) {
|
|||
func (cell *Cell) SetFgColour(r, g, b float32) {
|
||||
if cell.text != nil && (cell.fgColour[0] != r || cell.fgColour[1] != g || cell.fgColour[2] != b) {
|
||||
cell.fgColour = [3]float32{r, g, b}
|
||||
cell.text.SetColor(mgl32.Vec3{r, g, b})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ func (cell *Cell) SetBgColour(r float32, g float32, b float32) {
|
|||
}
|
||||
|
||||
cell.bgColour = [3]float32{r, g, b}
|
||||
cell.Clean()
|
||||
//cell.Clean()
|
||||
cell.makeVao()
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,6 @@ func (gui *GUI) updateTexts() {
|
|||
}
|
||||
|
||||
gui.cells[row][col].SetFgColour(c.GetFgColour())
|
||||
gui.cells[row][col].SetBgColour(c.GetBgColour())
|
||||
gui.cells[row][col].SetRune(c.GetRune())
|
||||
gui.cells[row][col].Show()
|
||||
|
||||
|
@ -122,6 +121,8 @@ func (gui *GUI) updateTexts() {
|
|||
gui.config.ColourScheme.Cursor[1],
|
||||
gui.config.ColourScheme.Cursor[2],
|
||||
)
|
||||
} else {
|
||||
gui.cells[row][col].SetBgColour(c.GetBgColour())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package terminal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
@ -20,7 +21,10 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
|
||||
// https://en.wikipedia.org/wiki/ANSI_escape_code
|
||||
|
||||
lineOverflow := false
|
||||
|
||||
for {
|
||||
|
||||
b := <-buffer
|
||||
|
||||
if b == 0x1b { // if the byte is an escape character, read the next byte to determine which one
|
||||
|
@ -201,7 +205,7 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
if line != nil {
|
||||
for i := 0; i <= terminal.position.Col; i++ {
|
||||
if i < len(line.Cells) {
|
||||
line.Cells[i].r = ' '
|
||||
line.Cells[i].r = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -244,7 +248,7 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
if line != nil {
|
||||
for i := 0; i <= terminal.position.Col; i++ {
|
||||
if i < len(line.Cells) {
|
||||
line.Cells[i].r = ' '
|
||||
line.Cells[i].r = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -361,7 +365,7 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
terminal.logger.Errorf("Unknown SGR control sequence: (ESC[%s%s%s)", param, intermediate, string(final))
|
||||
}
|
||||
|
||||
terminal.logger.Debugf("SGR control sequence: (ESC[%s%s%s)", param, intermediate, string(final))
|
||||
//terminal.logger.Debugf("SGR control sequence: (ESC[%s%s%s)", param, intermediate, string(final))
|
||||
}
|
||||
|
||||
default:
|
||||
|
@ -439,11 +443,36 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
// numeric char selection @todo
|
||||
case '=':
|
||||
//alternate char selection @todo
|
||||
case '?':
|
||||
pm := ""
|
||||
for {
|
||||
b = <-buffer
|
||||
switch b {
|
||||
case 'h':
|
||||
switch pm {
|
||||
default:
|
||||
terminal.logger.Errorf("Unknown private code ESC?%sh", pm)
|
||||
}
|
||||
case 'l':
|
||||
switch pm {
|
||||
default:
|
||||
terminal.logger.Errorf("Unknown private code ESC?%sl", pm)
|
||||
}
|
||||
default:
|
||||
pm += string(b)
|
||||
}
|
||||
}
|
||||
default:
|
||||
terminal.logger.Errorf("Unknown control sequence: 0x%02X [%s]", b, string(b))
|
||||
}
|
||||
} else {
|
||||
|
||||
fmt.Printf("%s", string(b))
|
||||
|
||||
if b != 0x0d {
|
||||
lineOverflow = false
|
||||
}
|
||||
|
||||
switch b {
|
||||
case 0x0a:
|
||||
|
||||
|
@ -455,7 +484,13 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
}
|
||||
|
||||
case 0x0d:
|
||||
if terminal.position.Col == 0 && terminal.position.Line > 0 && lineOverflow {
|
||||
terminal.position.Line--
|
||||
terminal.logger.Debugf("Swallowing forced new line for CR")
|
||||
lineOverflow = false
|
||||
}
|
||||
terminal.position.Col = 0
|
||||
|
||||
case 0x08:
|
||||
// backspace
|
||||
terminal.position.Col--
|
||||
|
@ -469,6 +504,7 @@ func (terminal *Terminal) processInput(buffer chan rune) {
|
|||
// fmt.Printf("%s\n", string([]byte{b}))
|
||||
if b >= 0x20 {
|
||||
terminal.writeRune(b)
|
||||
lineOverflow = terminal.position.Col == 0
|
||||
} else {
|
||||
terminal.logger.Error("Non-readable rune received: 0x%X", b)
|
||||
}
|
||||
|
|
|
@ -142,16 +142,7 @@ func (terminal *Terminal) hideCursor() {
|
|||
|
||||
func (terminal *Terminal) incrementPosition() {
|
||||
position := terminal.getPosition()
|
||||
if position.Col+1 >= int(terminal.size.Width) {
|
||||
position.Line++
|
||||
_, h := terminal.GetSize()
|
||||
if position.Line >= h {
|
||||
position.Line--
|
||||
}
|
||||
position.Col = 0
|
||||
} else {
|
||||
position.Col++
|
||||
}
|
||||
position.Col++
|
||||
terminal.SetPosition(position)
|
||||
}
|
||||
|
||||
|
@ -206,7 +197,20 @@ func (terminal *Terminal) Read() error {
|
|||
}
|
||||
|
||||
func (terminal *Terminal) writeRune(r rune) {
|
||||
terminal.setRuneAtPos(terminal.position, r)
|
||||
w, h := terminal.GetSize()
|
||||
wrap := false
|
||||
if terminal.position.Col >= w {
|
||||
terminal.position.Col = 0
|
||||
terminal.position.Line++
|
||||
wrap = true
|
||||
for terminal.position.Line >= h {
|
||||
terminal.position.Line--
|
||||
line := NewLine()
|
||||
line.wrapped = true
|
||||
terminal.lines = append(terminal.lines, line)
|
||||
}
|
||||
}
|
||||
terminal.setRuneAtPos(terminal.position, r, wrap)
|
||||
terminal.incrementPosition()
|
||||
|
||||
}
|
||||
|
@ -241,7 +245,7 @@ func (terminal *Terminal) GetCellAtPos(pos Position) (*Cell, error) {
|
|||
return &line.Cells[pos.Col], nil
|
||||
}
|
||||
|
||||
func (terminal *Terminal) setRuneAtPos(pos Position, r rune) error {
|
||||
func (terminal *Terminal) setRuneAtPos(pos Position, r rune, wrap bool) error {
|
||||
|
||||
if int(terminal.size.Width) <= pos.Col {
|
||||
terminal.logger.Errorf("Col %d does not exist", pos.Col)
|
||||
|
@ -249,7 +253,9 @@ func (terminal *Terminal) setRuneAtPos(pos Position, r rune) error {
|
|||
}
|
||||
|
||||
for terminal.position.Line >= len(terminal.lines) {
|
||||
terminal.lines = append(terminal.lines, NewLine())
|
||||
nl := NewLine()
|
||||
nl.wrapped = wrap
|
||||
terminal.lines = append(terminal.lines, nl)
|
||||
}
|
||||
|
||||
line := terminal.getBufferedLine(pos.Line)
|
||||
|
|
Loading…
Reference in New Issue