Ever wondered why column.ui applies the untracked files in git-status,
but not for the help text comment in git-commit? Nobody wrote the code!

This is marked as WIP, as it barely demonstrates how the code may look
like. No tests, no documentation.

Signed-off-by: Stefan Beller <sbel...@google.com>
---
 builtin/commit.c |  1 -
 wt-status.c      | 29 ++++++++++++++++++++++++-----
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/builtin/commit.c b/builtin/commit.c
index 4e288bc513..f482150df8 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1649,7 +1649,6 @@ int cmd_commit(int argc, const char **argv, const char 
*prefix)
 
        status_init_config(&s, git_commit_config);
        status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
-       s.colopts = 0;
 
        if (get_sha1("HEAD", oid.hash))
                current_head = NULL;
diff --git a/wt-status.c b/wt-status.c
index 308cf3779e..cfba352683 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -43,12 +43,13 @@ static const char *color(int slot, struct wt_status *s)
        return c;
 }
 
-static void status_vprintf(struct wt_status *s, int at_bol, const char *color,
+static int status_vprintf(struct wt_status *s, int at_bol, const char *color,
                const char *fmt, va_list ap, const char *trail)
 {
        struct strbuf sb = STRBUF_INIT;
        struct strbuf linebuf = STRBUF_INIT;
        const char *line, *eol;
+       int ret = 0;
 
        strbuf_vaddf(&sb, fmt, ap);
        if (!sb.len) {
@@ -59,9 +60,9 @@ static void status_vprintf(struct wt_status *s, int at_bol, 
const char *color,
                }
                color_print_strbuf(s->fp, color, &sb);
                if (trail)
-                       fprintf(s->fp, "%s", trail);
+                       ret += fprintf(s->fp, "%s", trail);
                strbuf_release(&sb);
-               return;
+               return ret;
        }
        for (line = sb.buf; *line; line = eol + 1) {
                eol = strchr(line, '\n');
@@ -78,15 +79,16 @@ static void status_vprintf(struct wt_status *s, int at_bol, 
const char *color,
                        strbuf_addstr(&linebuf, line);
                color_print_strbuf(s->fp, color, &linebuf);
                if (eol)
-                       fprintf(s->fp, "\n");
+                       ret += fprintf(s->fp, "\n");
                else
                        break;
                at_bol = 1;
        }
        if (trail)
-               fprintf(s->fp, "%s", trail);
+               ret += fprintf(s->fp, "%s", trail);
        strbuf_release(&linebuf);
        strbuf_release(&sb);
+       return ret;
 }
 
 void status_printf_ln(struct wt_status *s, const char *color,
@@ -834,6 +836,20 @@ static void wt_longstatus_print_submodule_summary(struct 
wt_status *s, int uncom
        strbuf_release(&summary);
 }
 
+static struct wt_status *global_wt_status_hack;
+static int column_status_printf(const char *fmt, ...)
+{
+       va_list ap;
+       struct wt_status *s = global_wt_status_hack;
+       int ret;
+
+       va_start(ap, fmt);
+       ret = status_vprintf(s, 0, "", fmt, ap, NULL);
+       va_end(ap);
+
+       return ret;
+}
+
 static void wt_longstatus_print_other(struct wt_status *s,
                                      struct string_list *l,
                                      const char *what,
@@ -856,6 +872,7 @@ static void wt_longstatus_print_other(struct wt_status *s,
                path = quote_path(it->string, s->prefix, &buf);
                if (column_active(s->colopts)) {
                        string_list_append(&output, path);
+                       global_wt_status_hack = s;
                        continue;
                }
                status_printf(s, color(WT_STATUS_HEADER, s), "\t");
@@ -876,6 +893,8 @@ static void wt_longstatus_print_other(struct wt_status *s,
        copts.indent = buf.buf;
        if (want_color(s->use_color))
                copts.nl = GIT_COLOR_RESET "\n";
+
+       copts._printf = column_status_printf;
        print_columns(&output, s->colopts, &copts);
        string_list_clear(&output, 0);
        strbuf_release(&buf);
-- 
2.12.2.511.g2abb8caf66

Reply via email to