it* sacc + cursorline and uri preview Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/sacc-sdk URL:git://git.codevoid.de/sacc-sdk codevoid.de 70 1Log /git/sacc-sdk/log.gph codevoid.de 70 1Files /git/sacc-sdk/files.gph codevoid.de 70 1Refs /git/sacc-sdk/refs.gph codevoid.de 70 1LICENSE /git/sacc-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 40de964b66ff1edbd19b6a61a68cee6f731e735c /git/sacc-sdk/commit/40de964b66ff1edbd19b6a61a68cee6f731e735c.gph codevoid.de 70 1parent 4472c9895534239b693171b37c1766352b538419 /git/sacc-sdk/commit/4472c9895534239b693171b37c1766352b538419.gph codevoid.de 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org codevoid.de 70 iDate: Sat, 21 Oct 2017 14:55:14 +0200 Err codevoid.de 70 i Err codevoid.de 70 iAdd search/filter function for the current entry Err codevoid.de 70 i Err codevoid.de 70 i...also adds keys to search forward and backward using the current Err codevoid.de 70 isearch term. Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M config.def.h | 3 +++ Err codevoid.de 70 i M ui_ti.c | 46 +++++++++++++++++++++++++++++-- Err codevoid.de 70 i M ui_txt.c | 23 ++++++++++++++++++++++- Err codevoid.de 70 i Err codevoid.de 70 i3 files changed, 69 insertions(+), 3 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/config.def.h b/config.def.h /git/sacc-sdk/file/config.def.h.gph codevoid.de 70 it@@ -15,6 +15,9 @@ Err codevoid.de 70 i #define _key_fetch 'L' /* refetch current item */ Err codevoid.de 70 i #define _key_help '?' /* display help */ Err codevoid.de 70 i #define _key_quit 'q' /* exit sacc */ Err codevoid.de 70 i+#define _key_search '/' /* search */ Err codevoid.de 70 i+#define _key_searchnext 'n' /* search same string forward */ Err codevoid.de 70 i+#define _key_searchprev 'N' /* search same string backward */ Err codevoid.de 70 i Err codevoid.de 70 i /* default plumber */ Err codevoid.de 70 i static char *plumber = "xdg-open"; Err codevoid.de 70 1diff --git a/ui_ti.c b/ui_ti.c /git/sacc-sdk/file/ui_ti.c.gph codevoid.de 70 it@@ -86,7 +86,7 @@ uiprompt(char *fmt, ...) Err codevoid.de 70 i } else if (input[r - 1] == '\n') { Err codevoid.de 70 i input[--r] = '\0'; Err codevoid.de 70 i } Err codevoid.de 70 i- Err codevoid.de 70 i+ Err codevoid.de 70 i return input; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 it@@ -289,7 +289,7 @@ movecurline(Item *item, int l) Err codevoid.de 70 i dir->printoff += l; Err codevoid.de 70 i } Err codevoid.de 70 i } Err codevoid.de 70 i- Err codevoid.de 70 i+ Err codevoid.de 70 i putp(tparm(cursor_address, curline - dir->printoff, 0)); Err codevoid.de 70 i putp(tparm(enter_standout_mode)); Err codevoid.de 70 i printitem(&dir->items[curline]); Err codevoid.de 70 it@@ -339,6 +339,32 @@ jumptoline(Item *entry, ssize_t line, int absolute) Err codevoid.de 70 i return; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i+void Err codevoid.de 70 i+searchinline(const char *searchstr, Item *entry, int pos) Err codevoid.de 70 i+{ Err codevoid.de 70 i+ Dir *dir; Err codevoid.de 70 i+ int i; Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (!searchstr || !(dir = entry->dat)) Err codevoid.de 70 i+ return; Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (pos > 0) { Err codevoid.de 70 i+ for (i = dir->curline + 1; i < dir->nitems; ++i) { Err codevoid.de 70 i+ if (strstr(dir->items[i].username, searchstr)) { Err codevoid.de 70 i+ jumptoline(entry, i, 1); Err codevoid.de 70 i+ break; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } else { Err codevoid.de 70 i+ for (i = dir->curline - 1; i > -1; --i) { Err codevoid.de 70 i+ if (strstr(dir->items[i].username, searchstr)) { Err codevoid.de 70 i+ jumptoline(entry, i, 1); Err codevoid.de 70 i+ break; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i static ssize_t Err codevoid.de 70 i nearentry(Item *entry, int direction) Err codevoid.de 70 i { Err codevoid.de 70 it@@ -362,6 +388,7 @@ Item * Err codevoid.de 70 i uiselectitem(Item *entry) Err codevoid.de 70 i { Err codevoid.de 70 i Dir *dir; Err codevoid.de 70 i+ char *searchstr = NULL; Err codevoid.de 70 i int plines = lines-2; Err codevoid.de 70 i Err codevoid.de 70 i if (!entry || !(dir = entry->dat)) Err codevoid.de 70 it@@ -444,6 +471,21 @@ uiselectitem(Item *entry) Err codevoid.de 70 i home: Err codevoid.de 70 i jumptoline(entry, 0, 0); Err codevoid.de 70 i continue; Err codevoid.de 70 i+ case _key_search: Err codevoid.de 70 i+ search: Err codevoid.de 70 i+ free(searchstr); Err codevoid.de 70 i+ if ((searchstr = uiprompt("Search for: ")) && Err codevoid.de 70 i+ searchstr[0]) Err codevoid.de 70 i+ goto searchnext; Err codevoid.de 70 i+ clear(&searchstr); Err codevoid.de 70 i+ continue; Err codevoid.de 70 i+ case _key_searchnext: Err codevoid.de 70 i+ searchnext: Err codevoid.de 70 i+ searchinline(searchstr, entry, +1); Err codevoid.de 70 i+ continue; Err codevoid.de 70 i+ case _key_searchprev: Err codevoid.de 70 i+ searchinline(searchstr, entry, -1); Err codevoid.de 70 i+ continue; Err codevoid.de 70 i case _key_quit: Err codevoid.de 70 i quit: Err codevoid.de 70 i return NULL; Err codevoid.de 70 1diff --git a/ui_txt.c b/ui_txt.c /git/sacc-sdk/file/ui_txt.c.gph codevoid.de 70 it@@ -163,12 +163,26 @@ printuri(Item *item, size_t i) Err codevoid.de 70 i } Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i+void Err codevoid.de 70 i+searchinline(const char *searchstr, Item *entry) Err codevoid.de 70 i+{ Err codevoid.de 70 i+ Dir *dir; Err codevoid.de 70 i+ size_t i; Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (!(dir = entry->dat)) Err codevoid.de 70 i+ return; Err codevoid.de 70 i+ Err codevoid.de 70 i+ for (i = 0; i < dir->nitems; ++i) Err codevoid.de 70 i+ if (strstr(dir->items[i].username, searchstr)) Err codevoid.de 70 i+ printuri(&(dir->items[i]), i + 1); Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i Item * Err codevoid.de 70 i uiselectitem(Item *entry) Err codevoid.de 70 i { Err codevoid.de 70 i Dir *dir; Err codevoid.de 70 i static char c; Err codevoid.de 70 i- char buf[BUFSIZ], nl; Err codevoid.de 70 i+ char buf[BUFSIZ], nl, *searchstr; Err codevoid.de 70 i int item, nitems, lines; Err codevoid.de 70 i Err codevoid.de 70 i if (!entry || !(dir = entry->dat)) Err codevoid.de 70 it@@ -238,6 +252,13 @@ uiselectitem(Item *entry) Err codevoid.de 70 i if (item > 0 && item <= nitems) Err codevoid.de 70 i printuri(&dir->items[item-1], item); Err codevoid.de 70 i continue; Err codevoid.de 70 i+ case '/': Err codevoid.de 70 i+ if ((searchstr = uiprompt("Search for: ")) && Err codevoid.de 70 i+ searchstr[0]) Err codevoid.de 70 i+ searchinline(searchstr, entry); Err codevoid.de 70 i+ free(searchstr); Err codevoid.de 70 i+ searchstr = NULL; Err codevoid.de 70 i+ continue; Err codevoid.de 70 i case 'h': Err codevoid.de 70 i case '?': Err codevoid.de 70 i help(); Err codevoid.de 70 .