diff --git a/grid.go b/grid.go index 0636e7b..e9cd7d0 100644 --- a/grid.go +++ b/grid.go @@ -44,21 +44,19 @@ func ExpandView(c *Container) { ex.Align() ui.Render(ex) - ui.Handle("/sys/kbd/", func(ui.Event) { ex.Up() }) - ui.Handle("/sys/kbd/", func(ui.Event) { ex.Down() }) - ui.Handle("/timer/1s", func(ui.Event) { - ui.Render(ex) - }) + + HandleKeys("up", ex.Up) + HandleKeys("down", ex.Down) + ui.Handle("/sys/kbd/", func(ui.Event) { ui.StopLoop() }) + + ui.Handle("/timer/1s", func(ui.Event) { ui.Render(ex) }) ui.Handle("/sys/wnd/resize", func(e ui.Event) { ex.SetWidth(ui.TermWidth()) ex.Align() log.Infof("resize: width=%v max-rows=%v", ex.Width, cGrid.MaxRows()) }) - ui.Handle("/sys/kbd/", func(ui.Event) { - ui.StopLoop() - }) - ui.Loop() + ui.Loop() c.SetUpdater(c.Widgets) } @@ -79,16 +77,18 @@ func Display() bool { cursor.RefreshContainers() RedrawRows(true) - ui.Handle("/sys/kbd/", func(ui.Event) { cursor.Up() }) - ui.Handle("/sys/kbd/", func(ui.Event) { cursor.Down() }) + HandleKeys("up", cursor.Up) + HandleKeys("down", cursor.Down) + HandleKeys("exit", ui.StopLoop) + HandleKeys("help", func() { + menu = HelpMenu + ui.StopLoop() + }) + ui.Handle("/sys/kbd/", func(ui.Event) { expand = true ui.StopLoop() }) - - ui.Handle("/sys/kbd/q", func(ui.Event) { ui.StopLoop() }) - ui.Handle("/sys/kbd/C-c", func(ui.Event) { ui.StopLoop() }) - ui.Handle("/sys/kbd/a", func(ui.Event) { config.Toggle("allContainers") RefreshDisplay() @@ -100,10 +100,6 @@ func Display() bool { menu = FilterMenu ui.StopLoop() }) - ui.Handle("/sys/kbd/h", func(ui.Event) { - menu = HelpMenu - ui.StopLoop() - }) ui.Handle("/sys/kbd/H", func(ui.Event) { config.Toggle("enableHeader") RedrawRows(true) diff --git a/keys.go b/keys.go new file mode 100644 index 0000000..b7c4d3b --- /dev/null +++ b/keys.go @@ -0,0 +1,32 @@ +package main + +import ( + ui "github.com/gizak/termui" +) + +// Common action keybindings +var keyMap = map[string][]string{ + "up": []string{ + "/sys/kbd/", + "/sys/kbd/k", + }, + "down": []string{ + "/sys/kbd/", + "/sys/kbd/j", + }, + "exit": []string{ + "/sys/kbd/q", + "/sys/kbd/C-c", + }, + "help": []string{ + "/sys/kbd/h", + "/sys/kbd/?", + }, +} + +// Apply a common handler function to all given keys +func HandleKeys(i string, f func()) { + for _, k := range keyMap[i] { + ui.Handle(k, func(ui.Event) { f() }) + } +} diff --git a/menus.go b/menus.go index 13e50f5..5c5ae15 100644 --- a/menus.go +++ b/menus.go @@ -81,11 +81,15 @@ func SortMenu() { // set cursor position to current sort field m.SetCursor(config.GetVal("sortField")) - ui.Render(m) - m.NavigationHandlers() + HandleKeys("up", m.Up) + HandleKeys("down", m.Down) + HandleKeys("exit", ui.StopLoop) + ui.Handle("/sys/kbd/", func(ui.Event) { config.Update("sortField", m.SelectedItem().Val) ui.StopLoop() }) + + ui.Render(m) ui.Loop() } diff --git a/widgets/menu/main.go b/widgets/menu/main.go index 95157ee..db55fef 100644 --- a/widgets/menu/main.go +++ b/widgets/menu/main.go @@ -100,27 +100,20 @@ func (m *Menu) Buffer() ui.Buffer { return buf } -func (m *Menu) Up(ui.Event) { +func (m *Menu) Up() { if m.cursorPos > 0 { m.cursorPos-- ui.Render(m) } } -func (m *Menu) Down(ui.Event) { +func (m *Menu) Down() { if m.cursorPos < (len(m.items) - 1) { m.cursorPos++ ui.Render(m) } } -// Setup some default handlers for menu navigation -func (m *Menu) NavigationHandlers() { - ui.Handle("/sys/kbd/", m.Up) - ui.Handle("/sys/kbd/", m.Down) - ui.Handle("/sys/kbd/q", func(ui.Event) { ui.StopLoop() }) -} - // Set width and height based on menu items func (m *Menu) calcSize() { m.Width = 7 // minimum width