Oops, fix short help wrt tab size short option
[tig] / tig.c
diff --git a/tig.c b/tig.c
index e8ee3ce..3a534fa 100644 (file)
--- a/tig.c
+++ b/tig.c
@@ -64,7 +64,7 @@
 
 static void die(const char *err, ...);
 static void report(const char *msg, ...);
-static int read_properties(const char *cmd, int separator, int (*read)(char *, int, char *, int));
+static int read_properties(FILE *pipe, int separator, int (*read)(char *, int, char *, int));
 static void set_nonblocking_input(bool loading);
 static size_t utf8_length(const char *string, size_t max_width, int *coloffset, int *trimmed);
 
@@ -227,7 +227,7 @@ VERSION " (" __DATE__ ")\n"
 "  -l                          Start up in log view\n"
 "  -d                          Start up in diff view\n"
 "  -n[I], --line-number[=I]    Show line numbers with given interval\n"
-"  -t[N], --tab-size[=N]       Set number of spaces for tab expansion\n"
+"  -b[N], --tab-size[=N]       Set number of spaces for tab expansion\n"
 "  --                          Mark end of tig options\n"
 "  -v, --version               Show version and exit\n"
 "  -h, --help                  Show help message and exit\n";
@@ -293,14 +293,14 @@ parse_options(int argc, char *argv[])
                }
 
                /**
-                * -t[NSPACES], --tab-size[=NSPACES]::
+                * -b[NSPACES], --tab-size[=NSPACES]::
                 *      Set the number of spaces tabs should be expanded to.
                 **/
-               if (!strncmp(opt, "-t", 2) ||
+               if (!strncmp(opt, "-b", 2) ||
                    !strncmp(opt, "--tab-size", 10)) {
                        char *num = opt;
 
-                       if (opt[1] == 't') {
+                       if (opt[1] == 'b') {
                                num = opt + 2;
 
                        } else if (opt[STRING_SIZE("--tab-size")] == '=') {
@@ -820,6 +820,10 @@ redraw_view(struct view *view)
  *     [main] c622eefaa485995320bc743431bae0d497b1d875 - commit 1 of 61 (1%)
  *
  * By default, the title of the current view is highlighted using bold font.
+ * For long loading views (taking over 3 seconds) the time since loading
+ * started will be appended:
+ *
+ *     [main] 77d9e40fbcea3238015aea403e06f61542df9a31 - commit 1 of 779 (0%) 5s
  **/
 
 static void
@@ -1472,9 +1476,10 @@ view_driver(struct view *view, enum request request)
                break;
 
        case REQ_STOP_LOADING:
-               foreach_view (view, i) {
+               for (i = 0; i < ARRAY_SIZE(views); i++) {
+                       view = &views[i];
                        if (view->pipe)
-                               report("Stopped loaded the %s view", view->name),
+                               report("Stopped loading the %s view", view->name),
                        end_update(view);
                }
                break;
@@ -1495,11 +1500,15 @@ view_driver(struct view *view, enum request request)
                return TRUE;
 
        case REQ_VIEW_CLOSE:
-               if (view->parent) {
+               /* XXX: Mark closed views by letting view->parent point to the
+                * view itself. Parents to closed view should never be
+                * followed. */
+               if (view->parent &&
+                   view->parent->parent != view->parent) {
                        memset(display, 0, sizeof(display));
                        current_view = 0;
                        display[current_view] = view->parent;
-                       view->parent = NULL;
+                       view->parent = view;
                        resize_display();
                        redraw_display();
                        break;
@@ -2380,11 +2389,11 @@ load_refs(void)
        const char *cmd_env = getenv("TIG_LS_REMOTE");
        const char *cmd = cmd_env && *cmd_env ? cmd_env : TIG_LS_REMOTE;
 
-       return read_properties(cmd, '\t', read_ref);
+       return read_properties(popen(cmd, "r"), '\t', read_ref);
 }
 
 static int
-read_config_option(char *name, int namelen, char *value, int valuelen)
+read_repo_config_option(char *name, int namelen, char *value, int valuelen)
 {
        if (!strcmp(name, "i18n.commitencoding")) {
                string_copy(opt_encoding, value);
@@ -2394,17 +2403,16 @@ read_config_option(char *name, int namelen, char *value, int valuelen)
 }
 
 static int
-load_config(void)
+load_repo_config(void)
 {
-       return read_properties("git repo-config --list", '=',
-                              read_config_option);
+       return read_properties(popen("git repo-config --list", "r"),
+                              "=", read_repo_config_option);
 }
 
 static int
-read_properties(const char *cmd, int separator,
+read_properties(FILE *pipe, int separator,
                int (*read_property)(char *, int, char *, int))
 {
-       FILE *pipe = popen(cmd, "r");
        char buffer[BUFSIZ];
        char *name;
        int state = OK;
@@ -2491,7 +2499,7 @@ main(int argc, char *argv[])
 
        /* Load the repo config file first so options can be overwritten from
         * the command line.  */
-       if (load_config() == ERR)
+       if (load_repo_config() == ERR)
                die("Failed to load repo config.");
 
        if (!parse_options(argc, argv))
@@ -2536,7 +2544,9 @@ main(int argc, char *argv[])
                                memcpy(opt_cmd, "git ", 4);
                                opt_request = REQ_VIEW_PAGER;
                        } else {
-                               request = ERR;
+                               report("Prompt interrupted by loading view, "
+                                      "press 'z' to stop loading views");
+                               request = REQ_SCREEN_UPDATE;
                        }
 
                        noecho();
@@ -2675,6 +2685,8 @@ main(int argc, char *argv[])
  * - The cursor can wrap-around on the last line and cause the
  *   window to scroll.
  *
+ * - The prompt doesn't work while loading.
+ *
  * TODO
  * ----
  * Features that should be explored.