static void add_pager_refs(struct view *view, const char *commit_id) { char buf[SIZEOF_STR]; const struct ref *list; size_t bufpos = 0; const char *sep = "Refs: "; list = get_ref_list(commit_id); if (!list) { if (view_has_flags(view, VIEW_ADD_DESCRIBE_REF) && refs_contain_tag()) add_line_text(view, sep, LINE_PP_REFS); return; } for (; list; list = list->next) { const struct ref *ref = list; const struct ref_format *fmt = get_ref_format(opt_reference_format, ref); if (!string_format_from(buf, &bufpos, "%s%s%s%s", sep, fmt->start, ref->name, fmt->end)) return; sep = ", "; } if (bufpos == 0) return; add_line_text(view, buf, LINE_PP_REFS); }
static bool blob_read(struct view *view, char *line) { if (!line) return TRUE; return add_line_text(view, line, LINE_DEFAULT) != NULL; }
bool pager_common_read(struct view *view, const char *data, enum line_type type, struct line **line_ptr) { struct line *line; if (!data) return true; if (opt_wrap_lines) { line = pager_wrap_line(view, data, type); } else { line = add_line_text(view, data, type); } if (!line) return false; if (line_ptr) *line_ptr = line; if (line->type == LINE_COMMIT && view_has_flags(view, VIEW_ADD_PAGER_REFS)) add_pager_refs(view, data + STRING_SIZE("commit ")); return true; }
static bool help_open(struct view *view, enum open_flags flags) { struct keymap *keymap; reset_view(view); add_line_text(view, "Quick reference for tig keybindings:", LINE_DEFAULT); add_line_text(view, "", LINE_DEFAULT); for (keymap = get_keymaps(); keymap; keymap = keymap->next) { struct help_request_iterator iterator = { view, keymap, TRUE }; if (foreach_request(help_open_keymap, &iterator)) help_open_keymap_run_requests(&iterator); } return TRUE; }
static void add_pager_refs(struct view *view, const char *commit_id) { char buf[SIZEOF_STR]; struct ref_list *list; size_t bufpos = 0, i; const char *sep = "Refs: "; bool is_tag = FALSE; list = get_ref_list(commit_id); if (!list) { if (view_has_flags(view, VIEW_ADD_DESCRIBE_REF)) goto try_add_describe_ref; return; } for (i = 0; i < list->size; i++) { struct ref *ref = list->refs[i]; const char *fmt = ref->tag ? "%s[%s]" : ref->remote ? "%s<%s>" : "%s%s"; if (!string_format_from(buf, &bufpos, fmt, sep, ref->name)) return; sep = ", "; if (ref->tag) is_tag = TRUE; } if (!is_tag && view_has_flags(view, VIEW_ADD_DESCRIBE_REF)) { try_add_describe_ref: /* Add <tag>-g<commit_id> "fake" reference. */ if (!add_describe_ref(buf, &bufpos, commit_id, sep)) return; } if (bufpos == 0) return; add_line_text(view, buf, LINE_PP_REFS); }
static void help_open_keymap_run_requests(struct help_request_iterator *iterator) { struct view *view = iterator->view; struct keymap *keymap = iterator->keymap; char buf[SIZEOF_STR]; const char *group = "External commands:"; int i; for (i = 0; TRUE; i++) { struct run_request *req = get_run_request(REQ_NONE + i + 1); const char *key; if (!req) break; if (req->keymap != keymap) continue; key = get_key_name(req->key); if (!*key) key = "(no key defined)"; if (iterator->add_title && help_open_keymap_title(view, keymap)) return; iterator->add_title = FALSE; if (group) { add_line_text(view, group, LINE_HELP_GROUP); group = NULL; } if (!argv_to_string(req->argv, buf, sizeof(buf), " ")) return; add_line_format(view, LINE_DEFAULT, " %-25s `%s`", key, buf); } }
static bool help_open_keymap(void *data, const struct request_info *req_info, const char *group) { struct help_request_iterator *iterator = data; struct view *view = iterator->view; struct keymap *keymap = iterator->keymap; const char *key = get_keys(keymap, req_info->request, TRUE); if (req_info->request == REQ_NONE || !key || !*key) return TRUE; if (iterator->add_title && help_open_keymap_title(view, keymap)) return FALSE; iterator->add_title = FALSE; if (iterator->group != group) { add_line_text(view, group, LINE_HELP_GROUP); iterator->group = group; } add_line_format(view, LINE_DEFAULT, " %-25s %-20s %s", key, enum_name(*req_info), req_info->help); return TRUE; }