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) } } }