From 11d09fa7676b50db49ce604ccabc357a0abf0fbd Mon Sep 17 00:00:00 2001 From: Laurent MAZET Date: Tue, 18 Mar 2025 16:12:16 +0100 Subject: [PATCH] fix search navigation in file list --- display.c | 6 +++--- function.c | 6 +++--- function.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/display.c b/display.c index da4b182..6a309b6 100644 --- a/display.c +++ b/display.c @@ -701,7 +701,7 @@ char *filewindow (char *name, window_t *win) pt = getwindow ("Search", win, 12, MAXLEN, search); free (search); search = pt; - sskip = find (lines, len, skip, search); + sskip = find (lines, len, skip, search, 0); break; case 'h': helpwindow (_help, (win->xsize - strmaxlen (_help, '\n')) / 2, 3 * win->yoffset); @@ -728,9 +728,9 @@ char *filewindow (char *name, window_t *win) break; case 'n': if (search) { - sskip = find (lines, len, GETSKIP (skip, sskip) + 1, search); + sskip = find (lines, len, GETSKIP (skip, sskip) + 1, search, 0); if (sskip == -1) { - sskip = find (lines, len, 0, search); + sskip = find (lines, len, 0, search, 0); } } break; diff --git a/function.c b/function.c index 82f7380..9dfa06c 100644 --- a/function.c +++ b/function.c @@ -789,11 +789,11 @@ char **splithexalines (char *buffer, int length, int width) return lines; } -int find (char **lines, int nblines, int skip, char *search) +int find (char **lines, int nblines, int skip, char *search, int dir) { int len = strlen (search); int i, j; - for (i = skip; i < nblines; i++) { + for (i = skip; (dir) ? (i >= 0) : (i < nblines); i += (dir) ? -1 : 1) { for (j = 0; lines[i][j] != 0; j++) { if (strncmp (lines[i] + j, search, len) == 0) { return i; @@ -819,7 +819,7 @@ void jumpto (list_t *list, int nbcols, int pageheight, char *search, int *x, int for (j = 0; j < list->nb; j++) { _list[j] = (list->tab + j)->name; } - skip = find (_list, list->nb, skip, search); + skip = find (_list, list->nb, skip, search, (offset < 0)); if (skip != -1) { *x = skip / height; *y = skip % height; diff --git a/function.h b/function.h index eb674a7..d7db9f2 100644 --- a/function.h +++ b/function.h @@ -69,7 +69,7 @@ void freelines (char **lines); char **splithexalines (char *buffer, int length, int width); -int find (char **lines, int nblines, int skip, char *search); +int find (char **lines, int nblines, int skip, char *search, int dir); void jumpto (list_t *list, int nbcols, int pageheight, char *search, int *x, int *y, int *page, int offset); -- 2.30.2