fix search navigation in file list
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 18 Mar 2025 15:12:16 +0000 (16:12 +0100)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 18 Mar 2025 15:12:16 +0000 (16:12 +0100)
display.c
function.c
function.h

index da4b1825e773da37661fb4aaec2caf8b4d7cfe33..6a309b647b98b9bb1fd37e22fb00876863b16bca 100644 (file)
--- 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;
index 82f7380314c9056e57b226b59203fa2b192406c6..9dfa06c877fd3220052ee6c29e365e96729fbe19 100644 (file)
@@ -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;
index eb674a782e41245736471ba36a66c7549931553d..d7db9f2f290b4ed6a38eed18fa6f43f426931a5c 100644 (file)
@@ -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);