}
}
-int _find (char **lines, int nblines, int skip, char *search)
-{
- int len = strlen (search);
- int i, j;
- for (i = skip; i < nblines; i++) {
- for (j = 0; lines[i][j] != 0; j++) {
- if (strncmp (lines[i] + j, search, len) == 0) {
- return i;
- }
- }
- }
-
- return -1;
-}
-
char *filewindow (char *name, window_t *win)
{
static char *_help =
pt = getwindow ("Search", win, 12, MAXLEN, search);
free (search);
search = pt;
- sskip = _find (lines, len, skip, search);
+ sskip = find (lines, len, skip, search);
break;
case 'h':
helpwindow (_help, (win->xsize - strmaxlen (_help, '\n')) / 2, 3 * win->yoffset);
break;
case 'n':
if (search) {
- sskip = _find (lines, len, GETSKIP (skip, sskip) + 1, search);
+ sskip = find (lines, len, GETSKIP (skip, sskip) + 1, search);
if (sskip == -1) {
- sskip = _find (lines, len, 0, search);
+ sskip = find (lines, len, 0, search);
}
}
break;
}
/* display panel */
+ if ((mode) && (search[i])) {
+ int n = (list[i]->nb + windir[i]->nbcols - 1) / windir[i]->nbcols;
+ int skip = index_x[i] * n + index_y[i];
+ char **_list = (char **) calloc (list[i]->nb, sizeof (char *));
+ CHECKALLOC (_list);
+ int j;
+ for (j = 0; j < list[i]->nb; j++) {
+ _list[j] = (list[i]->tab + j)->name;
+ }
+ skip = find (_list, list[i]->nb, skip, search[i]);
+ if (skip != -1) {
+ index_x[i] = skip / n;
+ index_y[i] = skip % n;
+ if (n > windir[i]->ysize) {
+ page[i] = index_y[i];
+ if (page[i] + windir[i]->ysize > n) {
+ page[i] = n - windir[i]->ysize;
+ index_y[i] -= page[i];
+ } else {
+ index_y[i] = 0;
+ }
+ }
+ }
+ free (_list);
+ }
displaywindow (windir[i], list[i], page[i], &index_x[i], &index_y[i], &index_f[i], search[i]);
/* display info */
case ALT_H:
helpwindow (help1, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset);
break;
+ case ALT_N:
+ break;
+ case ALT_P:
+ break;
case ALT_Q:
mode = 0;
free (search[panel]);
search[panel] = NULL;
break;
case ALT_R:
- *search[panel] = '\0';
+ search[panel][0] = '\0';
break;
#ifndef PDCURSES
}
search[panel] = (char *) realloc (search[panel], len + 2);
CHECKALLOC (search[panel]);
search[panel][len] = ch;
- search[panel][len + 1] = 0;
+ search[panel][len + 1] = '\0';
break;
}
continue;
break;
case KEY_UP:
case 'i':
- if (index_y[panel]> 0) {
+ if (index_y[panel] > 0) {
index_y[panel]--;
- } else if (page[panel]> 0) {
+ } else if (page[panel] > 0) {
page[panel]--;
}
break;
case KEY_LEFT:
case 'j':
- if (index_x[panel]> 0) {
+ if (index_x[panel] > 0) {
index_x[panel]--;
}
break;
case KEY_DOWN:
case 'k':
- if (index_y[panel]< min (windir[panel]->ysize, (list[panel]->nb + windir[panel]->nbcols - 1) / windir[panel]->nbcols) - 1) {
+ if (index_y[panel] < min (windir[panel]->ysize, (list[panel]->nb + windir[panel]->nbcols - 1) / windir[panel]->nbcols) - 1) {
index_y[panel]++;
} else if (page[panel]+ windir[panel]->ysize < (list[panel]->nb + windir[panel]->nbcols - 1) / windir[panel]->nbcols) {
page[panel]++;
break;
case KEY_RIGHT:
case 'l':
- if (index_x[panel]< min (windir[panel]->nbcols, list[panel]->nb) - 1) {
+ if (index_x[panel] < min (windir[panel]->nbcols, list[panel]->nb) - 1) {
index_x[panel]++;
}
break;
/* Filter and selection */
/* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n ' .*\.c'; sleep 1; echo; sleep 1; echo -en 'kkk\esl'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
/* test: { sleep 1; echo -en '\ef'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
-/* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n 123456789012345678901234567890123; sleep 1; echo -en '\b\b'; sleep 1; echo -ne '\e'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
+/* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n 123456789012345678901234567890123; sleep 1; echo -en '\b\b'; sleep 1; echo -en '\e'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
/* New directory */
/* test: { sleep 1; echo -en '\en'; sleep 1; echo -n foobar; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir foobar */
/* test: ln -s .b .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo; sleep 1; echo ; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
/* View */
-/* test: echo -ne 'Begin\n This is a test\nEnd' > .a && { sleep 1; echo -n 'k'; sleep 1; echo; sleep 1; echo -n kkk; sleep 1; echo -n iii; sleep 1; echo -n h; sleep 1; echo; sleep 1; echo -n m; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
+/* test: echo -en 'Begin\n This is a test\nEnd' > .a && { sleep 1; echo -n 'k'; sleep 1; echo; sleep 1; echo -n kkk; sleep 1; echo -n iii; sleep 1; echo -n h; sleep 1; echo; sleep 1; echo -n m; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
/* test: cp fm.c .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; for i in $(seq 1 1000); do echo -n k; done; sleep 1; for i in $(seq 1 1000); do echo -n i; done; sleep 1; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
/* test: cp fm.c .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo -n KKKK; sleep 1; echo -n IIII; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
/* test: cp debug.o .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; for i in $(seq 1 100); do echo -n k; done; sleep 1; for i in $(seq 1 100); do echo -n i; done; sleep 1; echo -n m; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
/* test: ln -s .b .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
/* Search in view */
-/* test: cp debug.o .a && { sleep 1; echo -ne 'k\ev'; sleep 1; echo -n f; sleep 1; echo -n ELF; sleep 1; echo ; sleep 1; echo -n n; sleep 1; echo -n n; sleep 1; echo -n kkkkkkk; sleep 1; echo -n iii; sleep 1; echo -n m ; sleep 1; echo -n kkkkkkkkkkkk; sleep 1; echo -n f; sleep 1; echo -ne '\b\b\b 00 00 00'; sleep 1; echo; sleep 1; for i in $(seq 1 20); do echo -n n; sleep 1; done; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
+/* test: cp debug.o .a && { sleep 1; echo -en 'k\ev'; sleep 1; echo -n f; sleep 1; echo -n ELF; sleep 1; echo ; sleep 1; echo -n n; sleep 1; echo -n n; sleep 1; echo -n kkkkkkk; sleep 1; echo -n iii; sleep 1; echo -n m ; sleep 1; echo -n kkkkkkkkkkkk; sleep 1; echo -n f; sleep 1; echo -en '\b\b\b 00 00 00'; sleep 1; echo; sleep 1; for i in $(seq 1 20); do echo -n n; sleep 1; done; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */
/* Search in panel */
+/* test: { sleep 1; echo -n fde; sleep 1; echo -en '\eh'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 */
/* test: { sleep 1; echo -n fde; sleep 1; echo -n bug; sleep 1; echo -n .h; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 */
/* vim: set ts=4 sw=4 et: */