index 35b0cfa0e25389cbd95bd5c9d7179f450e90edb9..f9d23ab53026e12236854ab0c168ebb783b6f91b 100644 (file)
--- a/tig.c
+++ b/tig.c
return !env || argv_from_string(argv, &argc, env);
}
+static void
+argv_free(const char *argv[])
+{
+ int argc;
+
+ for (argc = 0; argv[argc]; argc++)
+ free((void *) argv[argc]);
+}
+
/*
* Executing external commands.
#define view_is_displayed(view) \
(view == display[0] || view == display[1])
+static enum request
+view_request(struct view *view, enum request request)
+{
+ if (!view || !view->lines)
+ return request;
+ return view->ops->request(view, request, &view->line[view->lineno]);
+}
+
+
+/*
+ * View drawing.
+ */
+
static inline void
set_view_attr(struct view *view, enum line_type type)
{
}
}
+
+/*
+ * Option management
+ */
+
static void
toggle_enum_option_do(unsigned int *opt, const char *help,
const struct enum_map *map, size_t size)
view->update_secs = 0;
}
-static void
-free_argv(const char *argv[])
-{
- int argc;
-
- for (argc = 0; argv[argc]; argc++)
- free((void *) argv[argc]);
-}
-
static const char *
format_arg(const char *name)
{
@@ -3177,7 +3195,7 @@ format_argv(const char *dst_argv[], const char *src_argv[], enum format_flags fl
int argc;
bool noreplace = flags == FORMAT_NONE;
- free_argv(dst_argv);
+ argv_free(dst_argv);
for (argc = 0; src_argv[argc]; argc++) {
const char *arg = src_argv[argc];
if (format_argv(argv, req->argv, FORMAT_ALL))
open_external_viewer(argv, NULL);
- free_argv(argv);
+ argv_free(argv);
}
/*
return TRUE;
}
- if (view && view->lines) {
- request = view->ops->request(view, request, &view->line[view->lineno]);
- if (request == REQ_NONE)
- return TRUE;
- }
+ request = view_request(view, request);
+ if (request == REQ_NONE)
+ return TRUE;
switch (request) {
case REQ_MOVE_UP:
if (view_is_displayed(view))
update_view_title(view);
if (line != view->lineno)
- view->ops->request(view, REQ_ENTER,
- &view->line[view->lineno]);
-
+ view_request(view, REQ_ENTER);
} else {
move_view(view, request);
}
}
static void
-open_blob_editor()
+open_blob_editor(const char *id)
{
+ const char *blob_argv[] = { "git", "cat-file", "blob", id, NULL };
char file[SIZEOF_STR] = "/tmp/tigblob.XXXXXX";
int fd = mkstemp(file);
if (fd == -1)
report("Failed to create temporary file");
- else if (!io_run_append(blob_ops.argv, FORMAT_ALL, fd))
+ else if (!io_run_append(blob_argv, FORMAT_NONE, fd))
report("Failed to save blob data to file");
else
open_editor(file);
tree_request(struct view *view, enum request request, struct line *line)
{
enum open_flags flags;
+ struct tree_entry *entry = line->data;
switch (request) {
case REQ_VIEW_BLAME:
if (line->type != LINE_TREE_FILE) {
report("Edit only supported for files");
} else if (!is_head_commit(view->vid)) {
- open_blob_editor();
+ open_blob_editor(entry->id);
} else {
open_editor(opt_file);
}
break;
case LINE_TREE_FILE:
- flags = display[0] == view ? OPEN_SPLIT : OPEN_DEFAULT;
+ flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;
request = REQ_VIEW_BLOB;
break;
{
switch (request) {
case REQ_EDIT:
- open_blob_editor();
+ open_blob_editor(view->vid);
return REQ_NONE;
default:
return pager_request(view, request, line);
static enum request
blame_request(struct view *view, enum request request, struct line *line)
{
- enum open_flags flags = display[0] == view ? OPEN_SPLIT : OPEN_DEFAULT;
+ enum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;
struct blame *blame = line->data;
switch (request) {
die("line type %d not handled in switch", line->type);
}
- split = view_is_displayed(view) ? OPEN_SPLIT : 0;
+ split = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;
open_view(view, REQ_VIEW_STAGE, OPEN_PREPARED | split);
if (view_is_displayed(VIEW(REQ_VIEW_STAGE))) {
if (status) {
static enum request
main_request(struct view *view, enum request request, struct line *line)
{
- enum open_flags flags = display[0] == view ? OPEN_SPLIT : OPEN_DEFAULT;
+ enum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;
switch (request) {
case REQ_ENTER: