Download raw body.
tog: add horizontal scrolling to the ref view
As per the subject line, given ref entries can be quite long, especially if the last modified date and ID is displayed (with 'm' and 'i' keymaps, respectively), I figure we should support horizontal scrolling in this view too. ok? ----------------------------------------------- commit 58b4cc4632fdcc6cd3a62a7a0678189680e7b78d (main) from: Mark Jamsek <mark@jamsek.dev> date: Wed Feb 1 07:01:28 2023 UTC tog: add horizontal scroll to the ref view M tog/tog.c | 35+ 4- 1 file changed, 35 insertions(+), 4 deletions(-) diff fa64fb25c20a748986758db1d7c9a333c2e71d0b 58b4cc4632fdcc6cd3a62a7a0678189680e7b78d commit - fa64fb25c20a748986758db1d7c9a333c2e71d0b commit + 58b4cc4632fdcc6cd3a62a7a0678189680e7b78d blob - 18fd85d80ae64e33a4203855e707a424341027e8 blob + 73869bfa87df9af7a68e8ec4c44690f950d74ccb --- tog/tog.c +++ tog/tog.c @@ -8059,7 +8059,7 @@ show_ref_view(struct tog_view *view) char *line = NULL; wchar_t *wline; struct tog_color *tc; - int width, n; + int width, n, scrollx; int limit = view->nlines; werase(view->window); @@ -8097,6 +8097,7 @@ show_ref_view(struct tog_view *view) return NULL; n = 0; + view->maxx = 0; while (re && limit > 0) { char *line = NULL; char ymd[13]; /* YYYY-MM-DD + " " + NUL */ @@ -8164,12 +8165,22 @@ show_ref_view(struct tog_view *view) got_ref_get_name(re->ref)) == -1) return got_error_from_errno("asprintf"); - err = format_line(&wline, &width, NULL, line, 0, view->ncols, - 0, 0); + /* use full line width to determine view->maxx */ + err = format_line(&wline, &width, NULL, line, 0, INT_MAX, 0, 0); if (err) { free(line); return err; } + view->maxx = MAX(view->maxx, width); + free(wline); + wline = NULL; + + err = format_line(&wline, &width, &scrollx, line, view->x, + view->ncols, 0, 0); + if (err) { + free(line); + return err; + } if (n == s->selected) { if (view->focussed) wstandout(view->window); @@ -8179,7 +8190,7 @@ show_ref_view(struct tog_view *view) if (tc) wattr_on(view->window, COLOR_PAIR(tc->colorpair), NULL); - waddwstr(view->window, wline); + waddwstr(view->window, &wline[scrollx]); if (tc) wattr_off(view->window, COLOR_PAIR(tc->colorpair), NULL); @@ -8290,6 +8301,26 @@ input_ref_view(struct tog_view **new_view, struct tog_ return ref_goto_line(view, nscroll); switch (ch) { + case '0': + view->x = 0; + break; + case '$': + view->x = MAX(view->maxx - view->ncols / 2, 0); + view->count = 0; + break; + case KEY_RIGHT: + case 'l': + if (view->x + view->ncols / 2 < view->maxx) + view->x += 2; + else + view->count = 0; + break; + case KEY_LEFT: + case 'h': + view->x -= MIN(view->x, 2); + if (view->x <= 0) + view->count = 0; + break; case 'i': s->show_ids = !s->show_ids; view->count = 0; -- Mark Jamsek <fnc.bsdbox.org> GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
tog: add horizontal scrolling to the ref view