highlight found sequence
authorLaurent Mazet <mazet@softndesign.org>
Sun, 9 Mar 2025 19:53:38 +0000 (20:53 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Sun, 9 Mar 2025 19:53:38 +0000 (20:53 +0100)
display.c

index d4caf48ef476b4420b534373d4e81be33d9fcd75..c72896c4c1ab9f29d6f459f19f4ae429df0158fe 100644 (file)
--- a/display.c
+++ b/display.c
@@ -539,16 +539,10 @@ void errorwindow (char *msg, window_t *win)
 int _find (char **lines, int nblines, int skip, char *search)
 {
     int len = strlen (search);
-    int i, j, k;
+    int i, j;
     for (i = skip; i < nblines; i++) {
         for (j = 0; lines[i][j] != 0; j++) {
-            int count = 0;
-            for (k = 0; k < len; k++) {
-                if (lines[i][j + k] == search[k]) {
-                    count++;
-                }
-            }
-            if (count == len) {
+            if (strncmp (lines[i] + j, search, len) == 0) {
                 return i;
             }
         }
@@ -620,16 +614,25 @@ char *filewindow (char *name, window_t *win)
             mvaddch (win->ysize + win->yoffset - 1, win->xsize + win->xoffset, ACS_DARROW);
         }
 
+        int slen = (search) ? strlen (search) : 0;
         for (i = 0; (i < win->ysize) && (lines[GETSKIP (skip, sskip) + i]); i++) {
             unsigned char *pt = (unsigned char *)(lines[GETSKIP (skip, sskip) + i]);
+            int highlight = 0;
             for (j = 0; (j < win->xsize) && (pt[j] != '\0'); j++) {
+                if ((slen) && (strncmp ((char *)(pt + j), search, slen) == 0)) {
+                    highlight = slen;
+                }
                 if (pt[j] == 128) {
                     set_color (imagenta);
                     mvaddch (win->yoffset + i, win->xoffset + j, '.');
-                    set_color (black);
                 } else {
+                    if (highlight) {
+                        set_color (ired);
+                        highlight--;
+                    }
                     mvaddch (win->yoffset + i, win->xoffset + j, (char)pt[j]);
                 }
+                set_color (black);
             }
             for (; j < win->xsize; j++) {
                 mvaddch (win->yoffset + i, win->xoffset + j, ' ');