set_color (white);
}
-void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y)
+void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y, int *index_f)
{
int i, j;
int _index_x = (index_x) ? *index_x : 0;
int _index_y = (index_y) ? *index_y : 0;
+ int _index_f = (index_f) ? *index_f : 0;
if ((page + _index_y == n - 1) && (_index_x > rem - 1)) {
_index_x = rem - 1;
}
if (index_y) {
*index_y = _index_y;
}
+ if (_index_f < 0) {
+ _index_f = 0;
+ }
VERBOSE (DEBUG, fprintf (stderr, "index: %d\n", index));
set_color (white);
}
}
+ int maxpos = 0;
for (i = j = 0; i < list->nb; i++, j++) {
if ((j + 1 ) % n == 0) {
if (rem > 0) {
attron (A_BOLD);
attron (A_UNDERLINE);
}
- int k;
- for (k = 0; (k < win->width) && (elem->name[k] != '\0'); k++) {
- mvaddch (win->yoffset + (j % n) - page, win->xoffset + (j / n) * win->width + k, elem->name[k]);
+
+ if ((int)strlen (elem->name) <= win->width) {
+ mvaddstr (win->yoffset + (j % n) - page, win->xoffset + (j / n) * win->width, elem->name);
+ } else {
+ int pos = ((int)strlen (elem->name) - _index_f < win->width) ? (int)strlen (elem->name) - win->width : _index_f;
+ if (maxpos < pos) {
+ maxpos = pos;
+ }
+ int k;
+ for (k = 0; k < win->width; k++) {
+ mvaddch (win->yoffset + (j % n) - page, win->xoffset + k, elem->name[k + pos]);
+ }
+ set_color (blue);
+ if (pos > 0) {
+ mvaddch (win->yoffset + (j % n) - page, win->xoffset, ACS_LARROW);
+ }
+ if ((int)strlen (elem->name) - pos > win->width) {
+ mvaddch (win->yoffset + (j % n) - page, win->xoffset + win->width - 1, ACS_RARROW);
+ }
}
set_color (white);
attron (0);
}
}
}
+ if (index_f) {
+ *index_f = maxpos;
+ }
set_color (win->active ? black : white);
_dobound (win->xsize, win->ysize, win->xoffset, win->yoffset);
void menuwindow (window_t *win, char *status, int *index);
-void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y);
+void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y, int *index);
void elementwindow (window_t *win, char *status, int *index);
winelem[i]->ysize = 1;
}
- int index_menu = 0;
- int index[MAXPANELS] = {0};
+ int index_m = 0;
+ int index_f[MAXPANELS] = {0};
+ int index_s[MAXPANELS] = {0};
int index_x[MAXPANELS] = {0};
int index_y[MAXPANELS] = {0};
list_t *list[MAXPANELS] = {0};
elem_t *current = NULL;
char *string = NULL;
- menuwindow (winmenu, menu, &index_menu);
+ menuwindow (winmenu, menu, &index_m);
/* display panels */
for (i = 0; i < MAXPANELS; i++) {
}
/* display panel */
- displaywindow (windir[i], list[i], page[i], &index_x[i], &index_y[i]);
+ displaywindow (windir[i], list[i], page[i], &index_x[i], &index_y[i], &index_f[i]);
/* display info */
current = list[i]->tab + windir[i]->index;
}
char status[MAXSTATUS] = {0};
createstatus (status, current);
- elementwindow (winelem[i], status, index + i);
+ elementwindow (winelem[i], status, index_s + i);
}
int ch = getch ();
free (msg);
}
free (src);
- menuwindow (winmenu, menu, &index_menu);
+ menuwindow (winmenu, menu, &index_m);
}
break;
case '\t':
}
break;
case 'o':
- index[panel]++;
+ index_f[panel]++;
+ index_m++;
+ index_s[panel]++;
break;
case 'u':
- index[panel]--;
+ index_f[panel]--;
+ index_m--;
+ index_s[panel]--;
break;
#ifndef PDCURSES
case KEY_ESC:
free (msg);
}
free (src);
- menuwindow (winmenu, menu, &index_menu);
+ menuwindow (winmenu, menu, &index_m);
}
break;
case ALT_X: /* chmod */
/* test: { sleep 1; echo -n KKKKK; sleep 1; echo -n IIIII; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d /dev -d . */
/* test: { sleep 1; for i in $(seq 1 50); do echo -n k; done; sleep 1; for i in $(seq 1 60); do echo -n i; done; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d /dev -d . */
/* test: { sleep 1; echo -n kkkkkkkkk; sleep 1; echo -n ooo; sleep 1; echo -n uu; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 */
+/* test: touch .this_is_a_very_long_file_name && { sleep 1; echo -n ooo; sleep 1; echo -n u; sleep 1; echo -n uu; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .this_is_a_very_long_file_name */
/* 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 */