tog: make it possible to open a ref view from the tree view
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
diff --git a/tog/tog.1 b/tog/tog.1
index 10aa4fa..a6e5d2c 100644
--- a/tog/tog.1
+++ b/tog/tog.1
@@ -346,6 +346,13 @@ view for the currently selected file.
Open a
.Cm log
view for the currently selected tree entry.
+.It Cm r
+Open a
+.Cm ref
+view listing all references in the repository.
+This can then be used to open a new
+.Cm tree
+view for arbitrary branches and tags.
.It Cm Backspace
Move back to the parent directory.
.It Cm i
diff --git a/tog/tog.c b/tog/tog.c
index 7a8da01..8442a98 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -5358,7 +5358,7 @@ input_tree_view(struct tog_view **new_view, struct tog_view **dead_view,
{
const struct got_error *err = NULL;
struct tog_tree_view_state *s = &view->state.tree;
- struct tog_view *log_view;
+ struct tog_view *log_view, *ref_view;
int begin_x = 0, nscrolled;
switch (ch) {
@@ -5386,6 +5386,32 @@ input_tree_view(struct tog_view **new_view, struct tog_view **dead_view,
} else
*new_view = log_view;
break;
+ case 'r':
+ if (view_is_parent_view(view))
+ begin_x = view_split_begin_x(view->begin_x);
+ ref_view = view_open(view->nlines, view->ncols,
+ view->begin_y, begin_x, TOG_VIEW_REF);
+ if (ref_view == NULL)
+ return got_error_from_errno("view_open");
+ err = open_ref_view(ref_view, s->repo);
+ if (err) {
+ view_close(ref_view);
+ return err;
+ }
+ if (view_is_parent_view(view)) {
+ err = view_close_child(view);
+ if (err)
+ return err;
+ err = view_set_child(view, ref_view);
+ if (err) {
+ view_close(ref_view);
+ break;
+ }
+ *focus_view = ref_view;
+ view->child_focussed = 1;
+ } else
+ *new_view = ref_view;
+ break;
case 'k':
case KEY_UP:
if (s->selected > 0) {