summaryrefslogtreecommitdiff
path: root/tui/input.go
diff options
context:
space:
mode:
Diffstat (limited to 'tui/input.go')
-rw-r--r--tui/input.go57
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