57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"syscall"
|
|
|
|
termbox "github.com/nsf/termbox-go"
|
|
)
|
|
|
|
func uiLoop() int {
|
|
err := termbox.Init()
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
return 1
|
|
}
|
|
termbox.SetOutputMode(termbox.Output256)
|
|
app.BuildScreens()
|
|
displayScreen := app.screens[ScreenMain]
|
|
bundle := Bundle{}
|
|
bundle.setValue(MainBundleListKey, MainBundleListTodo)
|
|
|
|
displayScreen.initialize(bundle)
|
|
app.layoutAndDrawScreen(displayScreen)
|
|
eventChan := make(chan termbox.Event)
|
|
go readUserInput(eventChan)
|
|
for {
|
|
event := <-eventChan
|
|
if event.Type == termbox.EventKey {
|
|
if event.Key == termbox.KeyCtrlC {
|
|
break
|
|
} else if event.Key == termbox.KeyCtrlZ {
|
|
if runtime.GOOS != "windows" {
|
|
process, _ := os.FindProcess(os.Getpid())
|
|
termbox.Close()
|
|
process.Signal(syscall.SIGSTOP)
|
|
termbox.Init()
|
|
}
|
|
}
|
|
newScreenIndex := displayScreen.handleKeyEvent(event)
|
|
if newScreenIndex < len(app.screens) {
|
|
displayScreen = app.screens[newScreenIndex]
|
|
app.layoutAndDrawScreen(displayScreen)
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
if event.Type == termbox.EventResize {
|
|
app.layoutAndDrawScreen(displayScreen)
|
|
}
|
|
}
|
|
termbox.Close()
|
|
// Any wrap up should be done here...
|
|
return 0
|
|
}
|