parent
e6dbadb3d5
commit
3c12d8010a
@ -0,0 +1,8 @@ |
||||
module todo-app |
||||
|
||||
go 1.21.3 |
||||
|
||||
require ( |
||||
golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e // indirect |
||||
seehuhn.de/go/ncurses v0.2.0 // indirect |
||||
) |
@ -0,0 +1,4 @@ |
||||
golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e h1:XNp2Flc/1eWQGk5BLzqTAN7fQIwIbfyVTuVxXxZh73M= |
||||
golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
seehuhn.de/go/ncurses v0.2.0 h1:ZV256n0GIMVEHJnECliGMffzdFsEoT7krJqdfGoYD1E= |
||||
seehuhn.de/go/ncurses v0.2.0/go.mod h1:oAc9Y+UN0tflNV0iME++z0ij9uNmIjdxQFkpGoRMd2E= |
@ -0,0 +1,99 @@ |
||||
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() |
||||
} |
Loading…
Reference in new issue