From 7b55fbdb6123a181aa8961713249e647361083ff Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Thu, 2 Jan 2025 23:00:40 +0100 Subject: [PATCH] solve issue on last line --- display.c | 26 +++++++++++++------------- display.h | 2 +- fm.c | 8 ++++---- type.h | 4 +++- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/display.c b/display.c index ec9322a..01b8222 100644 --- a/display.c +++ b/display.c @@ -117,22 +117,24 @@ int helpwindow (char *msg, int xoffset, int yoffset) return j; } -int 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 i, j; - int nbcols = win->xsize / (list->width + 1); - VERBOSE (DEBUG, fprintf (stderr, "nbcols: %d\n", nbcols)); - int width = win->xsize / nbcols; - VERBOSE (DEBUG, fprintf (stderr, "width: %d\n", width)); - int n = (list->nb + nbcols - 1) / nbcols; - VERBOSE (DEBUG, fprintf (stderr, "n: %d\n", n)); - int rem = list->nb - nbcols * (list->nb / nbcols); + win->nbcols = win->xsize / (list->width + 1); + win->width = win->xsize / win->nbcols; + int n = (list->nb + win->nbcols - 1) / win->nbcols; + int rem = list->nb - win->nbcols * (list->nb / win->nbcols); if (rem == 0) { - rem = nbcols; + rem = win->nbcols; } VERBOSE (DEBUG, fprintf (stderr, "rem: %d\n", rem)); - int index = page + index_y + n * index_x; + + if ((page + *index_y == n - 1) && (*index_x > rem - 1)) { + *index_x = rem - 1; + } + int index = page + *index_y + n * *index_x; + VERBOSE (DEBUG, fprintf (stderr, "index: %d\n", index)); for (i = j = 0; i < list->nb; i++, j++) { if ((j + 1 ) % n == 0) { @@ -170,7 +172,7 @@ int displaywindow (window_t *win, list_t *list, int page, int index_x, int index set_color ((j == index) ? bred : red); break; } - mvaddstr (win->yoffset + (j % n) - page, win->xoffset + (j / n) * width, elem->name); + mvaddstr (win->yoffset + (j % n) - page, win->xoffset + (j / n) * win->width, elem->name); set_color (white); } } @@ -186,8 +188,6 @@ int displaywindow (window_t *win, list_t *list, int page, int index_x, int index mvaddch (win->ysize + win->yoffset, win->xsize + win->xoffset, ACS_DARROW); } set_color (white); - - return nbcols; } char *getwindow (int length, int xoffset, int yoffset) diff --git a/display.h b/display.h index 68a0177..cb23d4a 100644 --- a/display.h +++ b/display.h @@ -8,7 +8,7 @@ int helpwindow (char *msg, int xoffset, int yoffset); -int 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); char *getwindow (int length, int xoffset, int yoffset); diff --git a/fm.c b/fm.c index ab54d6a..f01826e 100644 --- a/fm.c +++ b/fm.c @@ -126,7 +126,7 @@ int main (int argc, char *argv[]) } clear (); - int nbcols = displaywindow (windir, list, page, index_x, index_y); + displaywindow (windir, list, page, &index_x, &index_y); int ch = getch (); switch (ch) { @@ -140,7 +140,7 @@ int main (int argc, char *argv[]) case KEY_NPAGE: case KEY_SRIGHT: case 'K': - if (page + windir->ysize < (list->nb + nbcols - 1) / nbcols) { + if (page + windir->ysize < (list->nb + windir->nbcols - 1) / windir->nbcols) { page++; } break; @@ -158,13 +158,13 @@ int main (int argc, char *argv[]) break; case KEY_DOWN: case 'k': - if (index_y < min (windir->ysize, (list->nb + nbcols - 1) / nbcols) - 1) { + if (index_y < min (windir->ysize, (list->nb + windir->nbcols - 1) / windir->nbcols) - 1) { index_y++; } break; case KEY_RIGHT: case 'l': - if (index_x < min (nbcols, list->nb) - 1) { + if (index_x < min (windir->nbcols, list->nb) - 1) { index_x++; } break; diff --git a/type.h b/type.h index 921dacc..3893352 100644 --- a/type.h +++ b/type.h @@ -28,9 +28,11 @@ typedef struct { } list_t; typedef struct { + int nbcols; + int width; int xoffset; - int yoffset; int xsize; + int yoffset; int ysize; } window_t; -- 2.30.2