fixed the updating of the view
This commit is contained in:
@ -2,7 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
// "fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
@ -17,6 +17,7 @@ import (
|
|||||||
var settings *toml.Tree
|
var settings *toml.Tree
|
||||||
var stdout_ring *ring.Ring
|
var stdout_ring *ring.Ring
|
||||||
var srv_stdin io.WriteCloser
|
var srv_stdin io.WriteCloser
|
||||||
|
var new_stdout bool = false
|
||||||
|
|
||||||
// reload settings (and maybe other things too)
|
// reload settings (and maybe other things too)
|
||||||
func reload() {
|
func reload() {
|
||||||
@ -51,36 +52,11 @@ func server_run() {
|
|||||||
if buf.Scan() {
|
if buf.Scan() {
|
||||||
stdout_ring.Value = buf.Text()
|
stdout_ring.Value = buf.Text()
|
||||||
stdout_ring = stdout_ring.Next()
|
stdout_ring = stdout_ring.Next()
|
||||||
|
new_stdout = true
|
||||||
} else {
|
} else {
|
||||||
time.Sleep(300 * time.Millisecond)
|
time.Sleep(300 * time.Millisecond)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//refresh the screen
|
|
||||||
func refresh(g *gocui.Gui) error {
|
|
||||||
v, err := g.View("srv_log")
|
|
||||||
if err != nil {
|
|
||||||
log.Panicln(err)
|
|
||||||
}
|
|
||||||
v.Clear()
|
|
||||||
|
|
||||||
_, vH := v.Size()
|
|
||||||
|
|
||||||
r := stdout_ring
|
|
||||||
|
|
||||||
v.Overwrite = true
|
|
||||||
|
|
||||||
for i := 0; i < vH; i++ {
|
|
||||||
v.SetCursor(4, vH - i)
|
|
||||||
if r.Value != nil {
|
|
||||||
fmt.Fprint(v, r.Value)
|
|
||||||
}
|
|
||||||
r = r.Prev()
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -105,23 +81,50 @@ func main() {
|
|||||||
|
|
||||||
go server_run()
|
go server_run()
|
||||||
|
|
||||||
|
go func(g *gocui.Gui) {
|
||||||
|
for {
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
if new_stdout {
|
||||||
|
new_stdout = false
|
||||||
|
g.Update(layout)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(g)
|
||||||
|
|
||||||
//run the CUI main loop
|
//run the CUI main loop
|
||||||
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
|
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//create the CUI layout
|
//create or update the CUI layout
|
||||||
func layout(g *gocui.Gui) error {
|
func layout(g *gocui.Gui) error {
|
||||||
maxX, maxY := g.Size()
|
maxX, maxY := g.Size()
|
||||||
|
|
||||||
if _, err := g.SetView("srv_log", 0, 0, maxX-1, int(float32(maxY) * 0.8)); err != nil {
|
v, err := g.SetView("srv_log", 0, 0, maxX-1, int(float32(maxY) * 0.8))
|
||||||
|
if err != nil {
|
||||||
if err != gocui.ErrUnknownView {
|
if err != gocui.ErrUnknownView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
//dont put code in here you idiot
|
||||||
}
|
}
|
||||||
|
|
||||||
refresh(g)
|
v.Clear()
|
||||||
|
|
||||||
|
vW, vH := v.Size()
|
||||||
|
|
||||||
|
r := stdout_ring.Prev()
|
||||||
|
|
||||||
|
for i := 0; i < vH; i++ {
|
||||||
|
v.SetCursor(0, vH - i - 1)
|
||||||
|
if r.Value != nil {
|
||||||
|
s := r.Value.(string)
|
||||||
|
for i := 0; i < len(s) && i < vW; i++ {
|
||||||
|
v.EditWrite([]rune(s)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r = r.Prev()
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user