From: Laurent Mazet Date: Sun, 19 Jan 2025 15:15:16 +0000 (+0100) Subject: add arrows and percentage in view mode X-Git-Tag: v1.0~23 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=eb723c47bd65def37812efa67b463cf7e8a40583;p=fm.git add arrows and percentage in view mode --- diff --git a/display.c b/display.c index d4d4d47..1d374bf 100644 --- a/display.c +++ b/display.c @@ -515,16 +515,39 @@ char *filewindow (char *name, window_t *win) } char **lines = splitlines (buffer, win->xsize); free (buffer); + int len = 0; + while (lines[len] != NULL) { + len++; + } + char *basename = strrchr (name, *SEPARATOR); + basename = (basename) ? basename + 1 : name; - char *title = strdupcat ("File: ", name, NULL); set_color (black); - _dobound (win->xsize, win->ysize, win->xoffset, win->yoffset); - _displaytitle (title, win->xoffset, win->yoffset, win->xsize); - int skip = 0; int stop = 0; while (!stop) { int i, j; + + _dobound (win->xsize, win->ysize, win->xoffset, win->yoffset); + + char percent[4] = {' ', ' ', ' ', 0}; + int ratio = (skip + win->ysize > len) ? 100 : 100 * (skip + win->ysize) / len; + for (i = 2; (i >= 0) && (ratio > 0); i--, ratio /= 10) { + percent[i] = '0' + (ratio % 10); + } + char *title = strdupcat (" File: ", name, " ", percent, "% ", NULL); + mvaddstr (win->yoffset - 1, win->xoffset + (win->xsize - strlen (title)) / 2, title); + free (title); + + if (skip > 0) { + mvaddch (win->yoffset - 1, win->xoffset - 1, ACS_UARROW); + mvaddch (win->yoffset - 1, win->xsize + win->xoffset, ACS_UARROW); + } + if (skip + win->ysize < len) { + mvaddch (win->ysize + win->yoffset, win->xoffset - 1, ACS_DARROW); + mvaddch (win->ysize + win->yoffset, win->xsize + win->xoffset, ACS_DARROW); + } + int eol = 0; for (i = 0; i < win->ysize; i++) { for (j = 0; j < win->xsize; j++) { @@ -555,7 +578,7 @@ char *filewindow (char *name, window_t *win) break; case 'k': case KEY_DOWN: - if (lines[skip + 1] != NULL) { + if (skip + win->ysize < len) { skip++; } break; @@ -564,7 +587,6 @@ char *filewindow (char *name, window_t *win) set_color (white); freelines (lines); - free (title); return NULL; } diff --git a/fm.c b/fm.c index 2c9776f..7ed2310 100644 --- a/fm.c +++ b/fm.c @@ -432,21 +432,23 @@ int main (int argc, char *argv[]) break; case ALT_V: /* view */ current = list[panel]->tab + windir[panel]->index; - for (i = 0; i < MAXPANELS; i++) { - elementwindow (winelem[i], "", NULL); - } - menuwindow (winmenu, "Help up(I) down(J) Quit", NULL); - elementwindow (winelem[0], current->name, NULL); - { + if (strcmp (current->name, "..") != 0) { + for (i = 0; i < MAXPANELS; i++) { + elementwindow (winelem[i], "", NULL); + } + menuwindow (winmenu, "Help up(I) down(J) Quit", NULL); char *src = newfilename (dirname[panel], current->name); + char *status = strdupcat ("Viewing file '", src, "'", NULL); + elementwindow (winelem[0], status, NULL); + free (status); char *msg = filewindow (src, winscreen); if (msg) { errorwindow (msg, winscreen); free (msg); } free (src); + menuwindow (winmenu, menu, &index_menu); } - menuwindow (winmenu, menu, &index_menu); break; case ALT_X: /* chmod */ string = getwindow ("Change selected file(s) to mode", winscreen, 4, 4, "0644");