Add keys to scroll to next/prev browseable entry - sacc - sacc(omys), simple console gopher client HTML git clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ DIR Log DIR Files DIR Refs DIR Tags DIR LICENSE --- DIR commit 90277d09e34282cbd7c21fbc6b0f5190aca3df21 DIR parent 38704075332efd50523896ea0ae68275b7fe0a0f HTML Author: Quentin Rameau <quinq@fifth.space> Date: Fri, 1 Sep 2017 16:09:47 +0200 Add keys to scroll to next/prev browseable entry Diffstat: M config.def.h | 2 ++ M ui_ti.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-) --- DIR diff --git a/config.def.h b/config.def.h @@ -2,7 +2,9 @@ /* Screen UI navigation keys */ #define _key_lndown 'j' /* move one line down */ +#define _key_entrydown 'J' /* move to next link */ #define _key_lnup 'k' /* move one line up */ +#define _key_entryup 'K' /* move to next link */ #define _key_pgdown ' ' /* move one screen down */ #define _key_pgup 'b' /* move one screen up */ #define _key_home 'g' /* move to the top of page */ DIR diff --git a/ui_ti.c b/ui_ti.c @@ -334,6 +334,25 @@ jumptoline(Item *entry, ssize_t line, int absolute) return; } +static ssize_t +nearentry(Item *entry, int direction) +{ + Dir *dir = entry->dat; + size_t item, lastitem; + + if (!dir) + return -1; + lastitem = dir->nitems; + item = dir->curline + direction; + + for (; item >= 0 && item < lastitem; item += direction) { + if (dir->items[item]->type != 'i') + return item; + } + + return dir->curline; +} + Item * uiselectitem(Item *entry) { @@ -394,6 +413,9 @@ uiselectitem(Item *entry) lndown: movecurline(entry, 1); continue; + case _key_entrydown: + jumptoline(entry, nearentry(entry, 1), 1); + continue; case _key_pgdown: pgdown: jumptoline(entry, dir->printoff + plines, 0); @@ -406,6 +428,9 @@ uiselectitem(Item *entry) lnup: movecurline(entry, -1); continue; + case _key_entryup: + jumptoline(entry, nearentry(entry, -1), 1); + continue; case _key_pgup: pgup: jumptoline(entry, dir->printoff - plines, 0);