From bfb892b0fc8c93e97f2adf47bc7b1314ca3eaba6 Mon Sep 17 00:00:00 2001 From: citrons Date: Mon, 27 Jan 2025 00:19:52 -0600 Subject: TUI library --- tui/input.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tui/input.go (limited to 'tui/input.go') 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 -- cgit v1.2.3