diff options
Diffstat (limited to 'vendor/github.com/cjbassi/termui/events.go')
-rw-r--r-- | vendor/github.com/cjbassi/termui/events.go | 190 |
1 files changed, 98 insertions, 92 deletions
diff --git a/vendor/github.com/cjbassi/termui/events.go b/vendor/github.com/cjbassi/termui/events.go index 3bc5459..6f128f3 100644 --- a/vendor/github.com/cjbassi/termui/events.go +++ b/vendor/github.com/cjbassi/termui/events.go @@ -1,9 +1,9 @@ package termui import ( - "strconv" + // "strconv" - tb "github.com/nsf/termbox-go" + "github.com/gdamore/tcell" ) /* @@ -27,14 +27,14 @@ var eventStream = EventStream{ make(map[string]func(Event)), "", make(chan bool, 1), - make(chan tb.Event), + make(chan tcell.Event), } type EventStream struct { eventHandlers map[string]func(Event) prevKey string // previous keypress stopLoop chan bool - eventQueue chan tb.Event // list of events from termbox + eventQueue chan tcell.Event // list of events from termbox } // Event is a copy of termbox.Event that only contains the fields we need. @@ -47,31 +47,35 @@ type Event struct { } // handleEvent calls the approriate callback function if there is one. -func handleEvent(e tb.Event) { - if e.Type == tb.EventError { - panic(e.Err) - } +func handleEvent(e tcell.Event) { + // if e.Type == tcell.EventError { + // panic(e.Err) + // } - ne := convertTermboxEvent(e) + ne := convertEvent(e) if val, ok := eventStream.eventHandlers[ne.Key]; ok { val(ne) - eventStream.prevKey = "" - } else { // check if the last 2 keys form a key combo with a handler - // if this is a keyboard event and the previous event was unhandled - if e.Type == tb.EventKey && eventStream.prevKey != "" { - combo := eventStream.prevKey + ne.Key - if val, ok := eventStream.eventHandlers[combo]; ok { - ne.Key = combo - val(ne) - eventStream.prevKey = "" - } else { - eventStream.prevKey = ne.Key - } - } else { - eventStream.prevKey = ne.Key - } } + + // if val, ok := eventStream.eventHandlers[ne.Key]; ok { + // val(ne) + // eventStream.prevKey = "" + // } else { // check if the last 2 keys form a key combo with a handler + // // if this is a keyboard event and the previous event was unhandled + // if e.Type == tcell.EventKey && eventStream.prevKey != "" { + // combo := eventStream.prevKey + ne.Key + // if val, ok := eventStream.eventHandlers[combo]; ok { + // ne.Key = combo + // val(ne) + // eventStream.prevKey = "" + // } else { + // eventStream.prevKey = ne.Key + // } + // } else { + // eventStream.prevKey = ne.Key + // } + // } } // Loop gets events from termbox and passes them off to handleEvent. @@ -79,7 +83,7 @@ func handleEvent(e tb.Event) { func Loop() { go func() { for { - eventStream.eventQueue <- tb.PollEvent() + eventStream.eventQueue <- screen.PollEvent() } }() @@ -113,90 +117,92 @@ func On(things ...interface{}) { } } -// convertTermboxKeyValue converts a termbox keyboard event to a more friendly string format. -// Combines modifiers into the string instead of having them as additional fields in an event. -func convertTermboxKeyValue(e tb.Event) string { - k := string(e.Ch) - pre := "" - mod := "" - - if e.Mod == tb.ModAlt { - mod = "<M-" - } - if e.Ch == 0 { - if e.Key > 0xFFFF-12 { - k = "<f" + strconv.Itoa(0xFFFF-int(e.Key)+1) + ">" - } else if e.Key > 0xFFFF-25 { - ks := []string{"<insert>", "<delete>", "<home>", "<end>", "<previous>", "<next>", "<up>", "<down>", "<left>", "<right>"} - k = ks[0xFFFF-int(e.Key)-12] - } - - if e.Key <= 0x7F { - pre = "<C-" - k = string('a' - 1 + int(e.Key)) - kmap := map[tb.Key][2]string{ - tb.KeyCtrlSpace: {"C-", "<space>"}, - tb.KeyBackspace: {"", "<backspace>"}, - tb.KeyTab: {"", "<tab>"}, - tb.KeyEnter: {"", "<enter>"}, - tb.KeyEsc: {"", "<escape>"}, - tb.KeyCtrlBackslash: {"C-", "\\"}, - tb.KeyCtrlSlash: {"C-", "/"}, - tb.KeySpace: {"", "<space>"}, - tb.KeyCtrl8: {"C-", "8"}, - } - if sk, ok := kmap[e.Key]; ok { - pre = sk[0] - k = sk[1] - } - } - } - - if pre != "" { - k += ">" - } - - return pre + mod + k -} - -func convertTermboxMouseValue(e tb.Event) string { - switch e.Key { - case tb.MouseLeft: +// // convertEventKey converts a tcell keyboard event to a more friendly string format. +// // Combines modifiers into the string instead of having them as additional fields in an event. +// func convertEventKey(e tcell.Event) string { +// k := string(e.Ch) +// pre := "" +// mod := "" + +// if e.Mod == tcell.ModAlt { +// mod = "<M-" +// } +// if e.Ch == 0 { +// if e.Key > 0xFFFF-12 { +// k = "<f" + strconv.Itoa(0xFFFF-int(e.Key)+1) + ">" +// } else if e.Key > 0xFFFF-25 { +// ks := []string{"<insert>", "<delete>", "<home>", "<end>", "<previous>", "<next>", "<up>", "<down>", "<left>", "<right>"} +// k = ks[0xFFFF-int(e.Key)-12] +// } + +// if e.Key <= 0x7F { +// pre = "<C-" +// k = string('a' - 1 + int(e.Key)) +// kmap := map[tcell.Key][2]string{ +// tcell.KeyCtrlSpace: {"C-", "<space>"}, +// tcell.KeyBackspace: {"", "<backspace>"}, +// tcell.KeyTab: {"", "<tab>"}, +// tcell.KeyEnter: {"", "<enter>"}, +// tcell.KeyEsc: {"", "<escape>"}, +// tcell.KeyCtrlBackslash: {"C-", "\\"}, +// tcell.KeyCtrlSlash: {"C-", "/"}, +// tcell.KeySpace: {"", "<space>"}, +// tcell.KeyCtrl8: {"C-", "8"}, +// } +// if sk, ok := kmap[e.Key]; ok { +// pre = sk[0] +// k = sk[1] +// } +// } +// } + +// if pre != "" { +// k += ">" +// } + +// return pre + mod + k +// } + +func convertMouseValue(e *tcell.EventMouse) string { + switch e.Buttons() { + case tcell.Button1: return "<MouseLeft>" - case tb.MouseMiddle: + case tcell.Button2: return "<MouseMiddle>" - case tb.MouseRight: + case tcell.Button3: return "<MouseRight>" - case tb.MouseWheelUp: + case tcell.WheelUp: return "<MouseWheelUp>" - case tb.MouseWheelDown: + case tcell.WheelDown: return "<MouseWheelDown>" - case tb.MouseRelease: - return "<MouseRelease>" } return "" } -// convertTermboxEvent turns a termbox event into a termui event. -func convertTermboxEvent(e tb.Event) Event { +// convertEvent turns a termbox event into a termui event. +func convertEvent(e interface{}) Event { var ne Event - switch e.Type { - case tb.EventKey: + switch e.(type) { + case *tcell.EventKey: ne = Event{ - Key: convertTermboxKeyValue(e), + // Key: convertEventKey(e.Key()), + Key: "hi", } - case tb.EventMouse: + case *tcell.EventMouse: + me := e.(*tcell.EventMouse) + x, y := me.Position() ne = Event{ - Key: convertTermboxMouseValue(e), - MouseX: e.MouseX, - MouseY: e.MouseY, + Key: convertMouseValue(me), + MouseX: x, + MouseY: y, } - case tb.EventResize: + case *tcell.EventResize: + width, height := screen.Size() ne = Event{ Key: "<resize>", - Width: e.Width, - Height: e.Height, + Width: width, + Height: height, } } |