35 lines
608 B
Go
35 lines
608 B
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"os"
|
|
"timshome.page/gilo/internal/rune"
|
|
"timshome.page/gilo/internal/terminal"
|
|
)
|
|
|
|
func main() {
|
|
// Go to proper raw mode, but restore canonical mode at exit
|
|
oldState := terminal.RawOn()
|
|
defer terminal.RawOff(oldState)
|
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
for {
|
|
char, _, err := reader.ReadRune()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Ugliest syntax structure ever?
|
|
switch {
|
|
case char == rune.Ctrl('q'):
|
|
terminal.OutLn("bye!")
|
|
return
|
|
case rune.IsCtrl(char):
|
|
terminal.OutLn("%d", char)
|
|
default:
|
|
terminal.OutLn("%d ('%c')", char, char)
|
|
}
|
|
}
|
|
}
|