2021-03-18 16:30:04 -04:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2021-03-18 19:15:19 -04:00
|
|
|
"bufio"
|
2021-03-18 16:30:04 -04:00
|
|
|
"os"
|
2021-03-19 16:39:49 -04:00
|
|
|
"timshome.page/gilo/internal/rune"
|
|
|
|
"timshome.page/gilo/internal/terminal"
|
2021-03-18 16:30:04 -04:00
|
|
|
)
|
|
|
|
|
2021-03-19 12:46:43 -04:00
|
|
|
func main() {
|
2021-03-19 16:39:49 -04:00
|
|
|
// Go to proper raw mode, but restore canonical mode at exit
|
|
|
|
oldState := terminal.RawOn()
|
|
|
|
defer terminal.RawOff(oldState)
|
2021-03-18 19:15:19 -04:00
|
|
|
|
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
|
|
|
|
for {
|
|
|
|
char, _, err := reader.ReadRune()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2021-03-19 12:46:43 -04:00
|
|
|
// Ugliest syntax structure ever?
|
2021-03-18 19:15:19 -04:00
|
|
|
switch {
|
2021-03-19 16:39:49 -04:00
|
|
|
case char == rune.Ctrl('q'):
|
|
|
|
terminal.OutLn("bye!")
|
2021-03-18 19:15:19 -04:00
|
|
|
return
|
2021-03-19 16:39:49 -04:00
|
|
|
case rune.IsCtrl(char):
|
|
|
|
terminal.OutLn("%d", char)
|
2021-03-19 12:03:55 -04:00
|
|
|
default:
|
2021-03-19 16:39:49 -04:00
|
|
|
terminal.OutLn("%d ('%c')", char, char)
|
2021-03-18 19:15:19 -04:00
|
|
|
}
|
|
|
|
}
|
2021-03-18 16:30:04 -04:00
|
|
|
}
|