From c8803f703c2ea2160dd355fdc349ce8d7c665e4c Mon Sep 17 00:00:00 2001 From: Miguel Mota Date: Sun, 29 Dec 2019 21:20:09 -0800 Subject: [PATCH] Add tab keybinding to move to next row or next page --- README.md | 4 +++ cointop/keybindings.go | 4 +++ cointop/navigation.go | 66 +++++++++++++++++++++++++++++++++++++++++- cointop/shortcuts.go | 1 + 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2388503..b6f6405 100644 --- a/README.md +++ b/README.md @@ -309,6 +309,7 @@ Key|Action Enter|Toggle chart for highlighted coin Esc|Quit view Space|Toggle coin as favorite +Tab|Move down or next page Ctrl+c|Quit application Ctrl+d|Jump page down (vim inspired) Ctrl+f|Search @@ -488,6 +489,7 @@ refresh_rate = 60 r = "sort_column_rank" s = "sort_column_symbol" space = "toggle_favorite" + tab = "move_down_or_next_page" t = "sort_column_total_supply" u = "sort_column_last_updated" v = "sort_column_24h_volume" @@ -526,6 +528,8 @@ Action|Description `move_to_page_visible_middle_row`|Move to middle visible row on page `move_up`|Move one row up `move_down`|Move one row down +`move_down_or_next_page`|Move one row down or to next page if at last row +`move_up_or_previous_page`|Move one row up or to previous page if at first row `next_chart_range`|Select next chart date range (e.g. 3D → 7D) `next_page`|Go to next page `open_link`|Open row link diff --git a/cointop/keybindings.go b/cointop/keybindings.go index 31c1c03..c0bf5ec 100644 --- a/cointop/keybindings.go +++ b/cointop/keybindings.go @@ -337,6 +337,10 @@ func (ct *Cointop) keybindings(g *gocui.Gui) error { fn = ct.keyfn(ct.EnlargeChart) case "shorten_chart": fn = ct.keyfn(ct.ShortenChart) + case "move_down_or_next_page": + fn = ct.keyfn(ct.CursorDownOrNextPage) + case "move_up_or_previous_page": + fn = ct.keyfn(ct.CursorUpOrPreviousPage) default: fn = ct.keyfn(ct.noop) } diff --git a/cointop/navigation.go b/cointop/navigation.go index 9e6f7f5..3e66359 100644 --- a/cointop/navigation.go +++ b/cointop/navigation.go @@ -169,6 +169,7 @@ func (ct *Cointop) navigateFirstLine() error { if err := ct.Views.Table.Backing().SetCursor(cx, 0); err != nil { return err } + ct.RowChanged() return nil } @@ -195,6 +196,7 @@ func (ct *Cointop) navigateLastLine() error { if err := ct.Views.Table.Backing().SetCursor(cx, sy-1); err != nil { return err } + ct.RowChanged() return nil } @@ -286,6 +288,24 @@ func (ct *Cointop) nextPage() error { return nil } +func (ct *Cointop) nextPageTop() error { + ct.debuglog("nextPageTop()") + + ct.nextPage() + ct.navigateFirstLine() + + return nil +} + +func (ct *Cointop) prevPageTop() error { + ct.debuglog("prevtPageTop()") + + ct.prevPage() + ct.navigateLastLine() + + return nil +} + func (ct *Cointop) firstPage() error { ct.debuglog("firstPage()") @@ -326,7 +346,7 @@ func (ct *Cointop) isFirstPage() bool { func (ct *Cointop) isLastPage() bool { ct.debuglog("isLastPage()") - return ct.State.page == ct.totalPages() + return ct.State.page == ct.totalPages()-1 } func (ct *Cointop) isPageFirstLine() bool { @@ -408,3 +428,47 @@ func (ct *Cointop) highlightRow(idx int) error { return nil } + +// CursorDownOrNextPage ... +func (ct *Cointop) CursorDownOrNextPage() error { + ct.debuglog("CursorDownOrNextPage()") + if ct.isLastRow() { + if ct.isLastPage() { + return nil + } + + if err := ct.nextPageTop(); err != nil { + return err + } + + return nil + } + + if err := ct.cursorDown(); err != nil { + return err + } + + return nil +} + +// CursorUpOrPreviousPage ... +func (ct *Cointop) CursorUpOrPreviousPage() error { + ct.debuglog("CursorUpOrPreviousPage()") + if ct.isFirstRow() { + if ct.isFirstPage() { + return nil + } + + if err := ct.prevPageTop(); err != nil { + return err + } + + return nil + } + + if err := ct.cursorUp(); err != nil { + return err + } + + return nil +} diff --git a/cointop/shortcuts.go b/cointop/shortcuts.go index d1d0b53..2499275 100644 --- a/cointop/shortcuts.go +++ b/cointop/shortcuts.go @@ -13,6 +13,7 @@ func DefaultShortcuts() map[string]string { "enter": "toggle_row_chart", "esc": "quit_view", "space": "toggle_favorite", + "tab": "move_down_or_next_page", "ctrl+c": "quit", "ctrl+C": "quit", "ctrl+d": "page_down",