From: Stefan Sperling Subject: Re: tog: add g/G support to tree, ref views To: Christian Weisgerber Cc: gameoftrees@openbsd.org Date: Fri, 3 Sep 2021 21:22:52 +0200 On Fri, Sep 03, 2021 at 08:27:35PM +0200, Christian Weisgerber wrote: > tog: add support for navigating to first/last line of tree and ref views > > OK? ok stsp Thank you! > diff refs/heads/main refs/heads/home+end > blob - e1460641f9ff41fe9c556f72f3433b6b500e9dc9 > blob + 6782772927c2e0682e87d5728b008b4502aff17b > --- tog/tog.1 > +++ tog/tog.1 > @@ -365,6 +365,10 @@ Move the selection cursor up. > Move the selection cursor down one page. > .It Cm Page-up, Ctrl+b > Move the selection cursor up one page. > +.It Cm Home, g > +Move the selection cursor to the first entry. > +.It Cm End, G > +Move the selection cursor to the last entry. > .It Cm Enter > Enter the currently selected directory, or switch to the > .Cm blame > @@ -431,6 +435,10 @@ Move the selection cursor up. > Move the selection cursor down one page. > .It Cm Page-up, Ctrl+b > Move the selection cursor up one page. > +.It Cm Home, g > +Move the selection cursor to the first reference. > +.It Cm End, G > +Move the selection cursor to the last reference. > .It Cm Enter > Open a > .Cm log > blob - 676aa5bfd38d46389ada9f6d333fc7b1eab64913 > blob + 6571f119993519e742623ae6d665fcc1cc098ad3 > --- tog/tog.c > +++ tog/tog.c > @@ -5396,7 +5396,8 @@ input_tree_view(struct tog_view **new_view, struct tog > const struct got_error *err = NULL; > struct tog_tree_view_state *s = &view->state.tree; > struct tog_view *log_view, *ref_view; > - int begin_x = 0; > + struct got_tree_entry *te; > + int begin_x = 0, n; > > switch (ch) { > case 'i': > @@ -5442,6 +5443,33 @@ input_tree_view(struct tog_view **new_view, struct tog > } else > *new_view = ref_view; > break; > + case 'g': > + case KEY_HOME: > + s->selected = 0; > + if (s->tree == s->root) > + s->first_displayed_entry = > + got_object_tree_get_first_entry(s->tree); > + else > + s->first_displayed_entry = NULL; > + break; > + case 'G': > + case KEY_END: > + s->selected = 0; > + te = got_object_tree_get_last_entry(s->tree); > + for (n = 0; n < view->nlines - 3; n++) { > + if (te == NULL) { > + if(s->tree != s->root) { > + s->first_displayed_entry = NULL; > + n++; > + } > + break; > + } > + s->first_displayed_entry = te; > + te = got_tree_entry_get_prev(s->tree, te); > + } > + if (n > 0) > + s->selected = n - 1; > + break; > case 'k': > case KEY_UP: > if (s->selected > 0) { > @@ -6158,7 +6186,8 @@ input_ref_view(struct tog_view **new_view, struct tog_ > const struct got_error *err = NULL; > struct tog_ref_view_state *s = &view->state.ref; > struct tog_view *log_view, *tree_view; > - int begin_x = 0; > + struct tog_reflist_entry *re; > + int begin_x = 0, n; > > switch (ch) { > case 'i': > @@ -6203,6 +6232,24 @@ input_ref_view(struct tog_view **new_view, struct tog_ > } else > *new_view = tree_view; > break; > + case 'g': > + case KEY_HOME: > + s->selected = 0; > + s->first_displayed_entry = TAILQ_FIRST(&s->refs); > + break; > + case 'G': > + case KEY_END: > + s->selected = 0; > + re = TAILQ_LAST(&s->refs, tog_reflist_head); > + for (n = 0; n < view->nlines - 1; n++) { > + if (re == NULL) > + break; > + s->first_displayed_entry = re; > + re = TAILQ_PREV(re, tog_reflist_head, entry); > + } > + if (n > 0) > + s->selected = n - 1; > + break; > case 'k': > case KEY_UP: > if (s->selected > 0) { > -- > Christian "naddy" Weisgerber naddy@mips.inka.de > >