static enum watch_trigger watch_refs_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check) { if (event == WATCH_EVENT_AFTER_COMMAND) load_refs(true); return WATCH_NONE; }
static enum request log_request(struct view *view, enum request request, struct line *line) { switch (request) { case REQ_REFRESH: load_refs(true); refresh_view(view); return REQ_NONE; case REQ_ENTER: if (!display[1] || strcmp(display[1]->vid, view->ref)) open_diff_view(view, OPEN_SPLIT); return REQ_NONE; default: return request; } }
static enum request refs_request(struct view *view, enum request request, struct line *line) { struct reference *reference = line->data; switch (request) { case REQ_REFRESH: load_refs(TRUE); refresh_view(view); return REQ_NONE; case REQ_ENTER: { const struct ref *ref = reference->ref; const char *all_references_argv[] = { GIT_MAIN_LOG_CUSTOM(encoding_arg, commit_order_arg(), "", refs_is_all(reference) ? "--all" : ref->name, "") }; open_argv(view, &main_view, all_references_argv, NULL, OPEN_SPLIT); return REQ_NONE; } case REQ_JUMP_COMMIT: { int lineno; for (lineno = 0; lineno < view->lines; lineno++) { struct reference *reference = view->line[lineno].data; if (!strncasecmp(reference->ref->id, view->env->search, strlen(view->env->search))) { select_view_line(view, lineno); report_clear(); return REQ_NONE; } } } default: return request; } }
int get_input(int prompt_position, struct key *key) { struct view *view; int i, key_value, cursor_y, cursor_x; if (prompt_position > 0) input_mode = true; memset(key, 0, sizeof(*key)); while (true) { int delay = -1; if (opt_refresh_mode == REFRESH_MODE_PERIODIC) { delay = watch_periodic(opt_refresh_interval); bool refs_refreshed = false; foreach_displayed_view (view, i) { if (view_can_refresh(view) && watch_dirty(&view->watch)) { if (!refs_refreshed) { load_refs(true); refs_refreshed = true; } refresh_view(view); } } } foreach_view (view, i) { update_view(view); if (view_is_displayed(view) && view->has_scrolled && use_scroll_redrawwin) redrawwin(view->win); view->has_scrolled = false; if (view->pipe) delay = 0; }