commit f1c0ec19a9ca0f47f5ed103fb127207019c336d2 from: Stefan Sperling via: Thomas Adam date: Thu Jun 23 14:09:34 2022 UTC fix horizontal scrolling of unicode in tog diff view ok op@ commit - d74d89932016eeae5963d366656c832a8b87d409 commit + f1c0ec19a9ca0f47f5ed103fb127207019c336d2 blob - 09dc44b2f4c8adcf13aeac0b8b931b86106498e4 blob + f572bc987c5d562e48a0a3fd7577ebf5fbd71854 --- tog/tog.c +++ tog/tog.c @@ -3245,8 +3245,6 @@ draw_file(struct tog_view *view, const char *header) free(line); return got_ferror(s->f, GOT_ERR_IO); } - - view->maxx = MAX(view->maxx, linelen); tc = match_color(&s->colors, line); if (tc) @@ -3260,22 +3258,38 @@ draw_file(struct tog_view *view, const char *header) free(line); return err; } + view->maxx = MAX(view->maxx, width); } else { - err = format_line(&wline, &width, NULL, line, 0, - view->x + view->ncols, 0, view->x ? 1 : 0); + int skip; + + /* Set view->maxx based on full line length. */ + err = format_line(&wline, &width, NULL, line, + 0, INT_MAX, 0, view->x ? 1 : 0); if (err) { free(line); return err; } - if (view->x < width) - waddwstr(view->window, wline + view->x); + view->maxx = MAX(view->maxx, width); + + /* + * Get a new version of the line for display. + * This will be scrolled and/or trimmed in length. + */ free(wline); + err = format_line(&wline, &width, &skip, line, + view->x, view->ncols, 0, view->x ? 1 : 0); + if (err) { + free(line); + return err; + } + waddwstr(view->window, &wline[skip]); + free(wline); wline = NULL; } if (tc) wattr_off(view->window, COLOR_PAIR(tc->colorpair), NULL); - if (width - view->x <= view->ncols - 1) + if (width <= view->ncols - 1) waddch(view->window, '\n'); nprinted++; }