Code

Remove macros which are only used for default option values
[tig.git] / tig.c
diff --git a/tig.c b/tig.c
index 87fc98656c6e95e1dbbecb31a031fcd0279ce093..3d04317cd6da6beb23f804bfe9bd23ffe8de4939 100644 (file)
--- a/tig.c
+++ b/tig.c
@@ -72,6 +72,7 @@ static size_t utf8_length(const char **string, size_t col, int *width, size_t ma
 
 #define ABS(x)         ((x) >= 0  ? (x) : -(x))
 #define MIN(x, y)      ((x) < (y) ? (x) :  (y))
+#define MAX(x, y)      ((x) > (y) ? (x) :  (y))
 
 #define ARRAY_SIZE(x)  (sizeof(x) / sizeof(x[0]))
 #define STRING_SIZE(x) (sizeof(x) - 1)
@@ -103,15 +104,9 @@ static size_t utf8_length(const char **string, size_t col, int *width, size_t ma
 #define DATE_FORMAT    "%Y-%m-%d %H:%M"
 #define DATE_COLS      STRING_SIZE("2006-04-29 14:21 ")
 
-#define AUTHOR_COLS    20
 #define ID_COLS                8
 
-/* The default interval between line numbers. */
-#define NUMBER_INTERVAL        5
-
-#define TAB_SIZE       8
-
-#define        SCALE_SPLIT_VIEW(height)        ((height) * 2 / 3)
+#define MIN_VIEW_HEIGHT 4
 
 #define NULL_ID                "0000000000000000000000000000000000000000"
 
@@ -911,10 +906,11 @@ static bool opt_line_number               = FALSE;
 static bool opt_line_graphics          = TRUE;
 static bool opt_rev_graph              = FALSE;
 static bool opt_show_refs              = TRUE;
-static int opt_num_interval            = NUMBER_INTERVAL;
+static int opt_num_interval            = 5;
 static double opt_hscroll              = 0.50;
-static int opt_tab_size                        = TAB_SIZE;
-static int opt_author_cols             = AUTHOR_COLS-1;
+static double opt_scale_split_view     = 2.0 / 3.0;
+static int opt_tab_size                        = 8;
+static int opt_author_cols             = 19;
 static char opt_path[SIZEOF_STR]       = "";
 static char opt_file[SIZEOF_STR]       = "";
 static char opt_ref[SIZEOF_REF]                = "";
@@ -1594,6 +1590,9 @@ option_set_command(int argc, const char *argv[])
        if (!strcmp(argv[0], "horizontal-scroll"))
                return parse_step(&opt_hscroll, argv[2]);
 
+       if (!strcmp(argv[0], "split-view-height"))
+               return parse_step(&opt_scale_split_view, argv[2]);
+
        if (!strcmp(argv[0], "tab-size"))
                return parse_int(&opt_tab_size, argv[2], 1, 1024);
 
@@ -2223,6 +2222,15 @@ update_view_title(struct view *view)
        wnoutrefresh(view->title);
 }
 
+static int
+apply_step(double step, int value)
+{
+       if (step >= 1)
+               return (int) step;
+       value *= step + 0.01;
+       return value ? value : 1;
+}
+
 static void
 resize_display(void)
 {
@@ -2240,7 +2248,9 @@ resize_display(void)
        if (view != base) {
                /* Horizontal split. */
                view->width   = base->width;
-               view->height  = SCALE_SPLIT_VIEW(base->height);
+               view->height  = apply_step(opt_scale_split_view, base->height);
+               view->height  = MAX(view->height, MIN_VIEW_HEIGHT);
+               view->height  = MIN(view->height, base->height - MIN_VIEW_HEIGHT);
                base->height -= view->height;
 
                /* Make room for the title bar. */
@@ -2353,15 +2363,6 @@ goto_view_line(struct view *view, unsigned long offset, unsigned long lineno)
        return FALSE;
 }
 
-static int
-apply_step(double step, int value)
-{
-       if (step >= 1)
-               return (int) step;
-       value *= step + 0.01;
-       return value ? value : 1;
-}
-
 /* Scrolling backend */
 static void
 do_scroll_view(struct view *view, int lines)
@@ -3517,22 +3518,39 @@ parse_author_line(char *ident, const char **author, time_t *time)
        }
 }
 
-static enum input_status
-select_commit_parent_handler(void *data, char *buf, int c)
+static bool
+open_commit_parent_menu(char buf[SIZEOF_STR], int *parents)
 {
-       size_t parents = *(size_t *) data;
-       int parent = 0;
+       char rev[SIZEOF_REV];
+       const char *revlist_argv[] = {
+               "git", "log", "--no-color", "-1", "--pretty=format:%s", rev, NULL
+       };
+       struct menu_item *items;
+       char text[SIZEOF_STR];
+       bool ok = TRUE;
+       int i;
 
-       if (!isdigit(c))
-               return INPUT_SKIP;
+       items = calloc(*parents + 1, sizeof(*items));
+       if (!items)
+               return FALSE;
 
-       if (*buf)
-               parent = atoi(buf) * 10;
-       parent += c - '0';
+       for (i = 0; i < *parents; i++) {
+               string_copy_rev(rev, &buf[SIZEOF_REV * i]);
+               if (!run_io_buf(revlist_argv, text, sizeof(text)) ||
+                   !(items[i].text = strdup(text))) {
+                       ok = FALSE;
+                       break;
+               }
+       }
 
-       if (parent > parents)
-               return INPUT_SKIP;
-       return INPUT_OK;
+       if (ok) {
+               *parents = 0;
+               ok = prompt_menu("Select parent", items, parents);
+       }
+       for (i = 0; items[i].text; i++)
+               free((char *) items[i].text);
+       free(items);
+       return ok;
 }
 
 static bool
@@ -3540,12 +3558,13 @@ select_commit_parent(const char *id, char rev[SIZEOF_REV], const char *path)
 {
        char buf[SIZEOF_STR * 4];
        const char *revlist_argv[] = {
-               "git", "rev-list", "-1", "--parents", id, "--", path, NULL
+               "git", "log", "--no-color", "-1",
+                       "--pretty=format:%P", id, "--", path, NULL
        };
        int parents;
 
        if (!run_io_buf(revlist_argv, buf, sizeof(buf)) ||
-           (parents = (strlen(buf) / 40) - 1) < 0) {
+           (parents = strlen(buf) / 40) < 0) {
                report("Failed to get parent information");
                return FALSE;
 
@@ -3557,17 +3576,8 @@ select_commit_parent(const char *id, char rev[SIZEOF_REV], const char *path)
                return FALSE;
        }
 
-       if (parents > 1) {
-               char prompt[SIZEOF_STR];
-               char *result;
-
-               if (!string_format(prompt, "Which parent? [1..%d] ", parents))
-                       return FALSE;
-               result = prompt_input(prompt, select_commit_parent_handler, &parents);
-               if (!result)
-                       return FALSE;
-               parents = atoi(result);
-       }
+       if (parents > 1 && !open_commit_parent_menu(buf, &parents))
+               return FALSE;
 
        string_copy_rev(rev, &buf[41 * parents]);
        return TRUE;