Download raw body.
[rfc] tog horizontal scroll (diff & blame view)
On Thu, Jun 16, 2022 at 09:15:24AM +0200, Stefan Sperling wrote:
> In the blame view, in an 80x24 terminal, horizontal scrolling has a rendering
> issue where separate lines get merged together. Even commit annotations are
> move up and get merged to the end of the previous line.
The code forgot to subtract the leading part, before view->x, from
the rendered line's width. Fix below works for me. ok?
diff b4996beee4ab59f339d2b4de7cfc401ba2f22c4e /home/stsp/src/got
blob - a3599eb66772cacb41dd2c51115381919d25c083
file + tog/tog.c
--- tog/tog.c
+++ tog/tog.c
@@ -4190,7 +4190,7 @@ draw_blame(struct tog_view *view)
struct tog_blame *blame = &s->blame;
regmatch_t *regmatch = &view->regmatch;
const struct got_error *err;
- int lineno = 0, nprinted = 0;
+ int lineno = 0, nprinted = 0, i;
char *line = NULL;
size_t linesize = 0;
ssize_t linelen;
@@ -4332,14 +4332,18 @@ draw_blame(struct tog_view *view)
} else {
err = format_line(&wline, &width, line,
view->x + view->ncols - 9, 9, 1);
- if (!err && view->x < width - 1) {
+ if (err) {
+ free(line);
+ return err;
+ }
+ if (view->x < width - 1) {
waddwstr(view->window, wline + view->x);
- width += 9;
+ for (i = 0; i < view->x; i++)
+ width -= wcwidth(wline[i]);
}
+ width += 9;
free(wline);
wline = NULL;
- if (err)
- return err;
}
if (width <= view->ncols - 1)
[rfc] tog horizontal scroll (diff & blame view)