diff options
Diffstat (limited to 'tui/input.go')
| -rw-r--r-- | tui/input.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tui/input.go b/tui/input.go new file mode 100644 index 0000000..a200e53 --- /dev/null +++ b/tui/input.go @@ -0,0 +1,57 @@ +package tui + +import ( + "os" + "os/signal" + "golang.org/x/term" + "unicode" + "syscall" + "bufio" +) + +type Event interface {} + +type TextInput rune +type Paste string +type Resize Dims + +var evChan chan Event +func Events() <-chan Event { + if evChan != nil { + return evChan + } + evChan = make(chan Event, 1) + + go func() { + rd := bufio.NewReader(os.Stdin) + for { + r, _, err := rd.ReadRune() + if err != nil { + evChan <- err + return + } + switch { + case r == '\033': + // todo + case unicode.IsControl(r): + default: + evChan <- TextInput(r) + } + } + }() + + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGWINCH) + go func() { + for _ = range sigs { + w, h, err := term.GetSize(0) + if err == nil { + evChan <- Resize {w, h} + } else { + evChan <- err + } + } + }() + + return evChan +}
\ No newline at end of file |
