From: Christian Weisgerber Subject: tog: add g/G support to tree, ref views To: gameoftrees@openbsd.org Date: Fri, 3 Sep 2021 20:27:35 +0200 tog: add support for navigating to first/last line of tree and ref views OK? 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