diff --git a/gilo.go b/gilo.go index be70783..1a10b38 100644 --- a/gilo.go +++ b/gilo.go @@ -3,7 +3,8 @@ package main import ( "bufio" "os" - "timshome.page/gilo/internal/rune" + + "timshome.page/gilo/internal/editor" "timshome.page/gilo/internal/terminal" ) @@ -14,21 +15,7 @@ func main() { 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) - } + for editor.ProcessKeypress(reader) { + // loop! } } diff --git a/internal/rune/rune.go b/internal/char/char.go similarity index 96% rename from internal/rune/rune.go rename to internal/char/char.go index 6213577..33e8648 100644 --- a/internal/rune/rune.go +++ b/internal/char/char.go @@ -1,4 +1,4 @@ -package rune +package char func isAscii(char rune) bool { ord := int(char) diff --git a/internal/editor/editor.go b/internal/editor/editor.go index 323df60..4563a9c 100644 --- a/internal/editor/editor.go +++ b/internal/editor/editor.go @@ -1 +1,34 @@ package editor + +import ( + "bufio" + + "timshome.page/gilo/internal/char" + "timshome.page/gilo/internal/terminal" +) + +func readKey(reader *bufio.Reader) (rune, int) { + ch, size, err := reader.ReadRune() + if err != nil { + panic(err) + } + + return ch, size +} + +func ProcessKeypress(reader *bufio.Reader) bool { + ch, _ := readKey(reader) + + // Ugliest syntax structure ever? + switch { + case ch == char.Ctrl('q'): + terminal.OutLn("bye!") + return false + case char.IsCtrl(ch): + terminal.OutLn("%d", ch) + default: + terminal.OutLn("%d ('%c')", ch, ch) + } + + return true +}