You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
todo-app/main.go

99 lines
1.4 KiB

package main
import (
"seehuhn.de/go/ncurses"
)
const MAX_TODOS = 3
type item struct {
desc string
done bool
}
func make_x(isDone bool) string {
s := ""
switch isDone {
case true:
s = "x"
case false:
s = " "
}
return s
}
func main() {
hasQuit := false
currTodo := 0
todos := []item{
{
"Make TODO app",
false,
},
{
"Make coffee",
true,
},
{
"Shit the bed",
false,
},
{
"Make a cup of tea",
false,
},
}
// Init window
win := ncurses.Init()
defer ncurses.EndWin()
ncurses.CursSet(ncurses.CursorOff)
for !hasQuit {
win.Erase()
win.Println("TODO:")
win.Println("----------------------")
for index, item := range todos {
if currTodo == index {
win.AttrOn(ncurses.AttrStandout)
win.Printf("[%s]", make_x(item.done))
win.Printf(" %s", item.desc)
win.Println("")
win.AttrOff(ncurses.AttrStandout)
} else {
win.AttrOn(ncurses.AttrNormal)
win.Printf("[%s]", make_x(item.done))
win.Printf(" %s", item.desc)
win.Println("")
win.AttrOff(ncurses.AttrNormal)
}
}
ch := win.GetCh()
switch ch {
case ncurses.KeyUp:
if currTodo == 0 {
currTodo = 0
} else {
currTodo -= 1
}
case ncurses.KeyDown:
if currTodo >= len(todos)-1 {
currTodo = len(todos) - 1
} else {
currTodo += 1
}
case ' ':
todos[currTodo].done = !todos[currTodo].done
case 'q':
hasQuit = !hasQuit
}
}
win.Refresh()
}