git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 11/13] status: add --column

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 3, 2012, 13:34 UTC
Message-ID
<1328276078-27955-12-git-send-email-pclouds@gmail.com>
In-Reply-To
<1328276078-27955-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Documentation/config.txt     |    4 ++++
 Documentation/git-status.txt |    7 +++++++
 Makefile                     |    2 +-
 builtin/commit.c             |   13 +++++++++++--
 wt-status.c                  |   38 ++++++++++++++++++++++++++++++++------
 wt-status.h                  |    2 +-
 6 files changed, 56 insertions(+), 10 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index c14db27..ebb210c 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -851,6 +851,10 @@ column.branch::
 	Specify whether to output branch listing in `git branch` in columns.
 	See `column.ui` for details.
 
+column.status::
+	Specify whether to output untracked files in `git status` in columns.
+	See `column.ui` for details.
+
 commit.status::
 	A boolean to enable/disable inclusion of status information in the
 	commit message template when using an editor to prepare the commit
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index 3d51717..2f87207 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -77,6 +77,13 @@ configuration variable documented in linkgit:git-config[1].
 	Terminate entries with NUL, instead of LF.  This implies
 	the `--porcelain` output format if no other format is given.
 
+--column[=<options>]::
+--no-column::
+	Display untracked files in columns. See configuration variable
+	column.status for option syntax.`--column` and `--no-column`
+	without options are equivalent to 'always' and 'never'
+	respectively.
+
 
 OUTPUT
 ------
diff --git a/Makefile b/Makefile
index 061f6e5..b2644bc 100644
--- a/Makefile
+++ b/Makefile
@@ -2116,7 +2116,7 @@ builtin/prune.o builtin/reflog.o reachable.o: reachable.h
 builtin/commit.o builtin/revert.o wt-status.o: wt-status.h
 builtin/tar-tree.o archive-tar.o: tar.h
 connect.o transport.o url.o http-backend.o: url.h
-builtin/branch.o column.o help.o pager.o: column.h
+builtin/branch.o builtin/commit.o column.o help.o pager.o: column.h
 http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
 http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
 
diff --git a/builtin/commit.c b/builtin/commit.c
index eba1377..8ce6a18 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -27,6 +27,7 @@
 #include "quote.h"
 #include "submodule.h"
 #include "gpg-interface.h"
+#include "column.h"
 
 static const char * const builtin_commit_usage[] = {
 	"git commit [options] [--] <filepattern>...",
@@ -88,6 +89,7 @@ static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
 static int no_post_rewrite, allow_empty_message;
 static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
 static char *sign_commit;
+static int colopts;
 
 /*
  * The default commit message cleanup mode will remove the lines
@@ -519,7 +521,7 @@ static int run_status(FILE *fp, const char *index_file, const char *prefix, int
 		wt_porcelain_print(s, null_termination);
 		break;
 	case STATUS_FORMAT_LONG:
-		wt_status_print(s);
+		wt_status_print(s, 0);
 		break;
 	}
 
@@ -1138,7 +1140,11 @@ static int parse_status_slot(const char *var, int offset)
 static int git_status_config(const char *k, const char *v, void *cb)
 {
 	struct wt_status *s = cb;
+	int status;
 
+	status = git_column_config(k, v, "status", &colopts);
+	if (status <= 0)
+		return status;
 	if (!strcmp(k, "status.submodulesummary")) {
 		int is_bool;
 		s->submodule_summary = git_config_bool_or_int(k, v, &is_bool);
@@ -1204,6 +1210,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
 		{ OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, "when",
 		  "ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)",
 		  PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
+		OPT_COLUMN(0, "column", &colopts, "list untracked files in columns" ),
 		OPT_END(),
 	};
 
@@ -1213,6 +1220,8 @@ int cmd_status(int argc, const char **argv, const char *prefix)
 	wt_status_prepare(&s);
 	gitmodules_config();
 	git_config(git_status_config, &s);
+	if (!colopts)
+		colopts = git_colopts | COL_ANSI;
 	determine_whence(&s);
 	argc = parse_options(argc, argv, prefix,
 			     builtin_status_options,
@@ -1251,7 +1260,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
 	case STATUS_FORMAT_LONG:
 		s.verbose = verbose;
 		s.ignore_submodule_arg = ignore_submodule_arg;
-		wt_status_print(&s);
+		wt_status_print(&s, colopts);
 		break;
 	}
 	return 0;
diff --git a/wt-status.c b/wt-status.c
index 9ffc535..86291e9 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -11,6 +11,7 @@
 #include "remote.h"
 #include "refs.h"
 #include "submodule.h"
+#include "column.h"
 
 static char default_wt_status_colors[][COLOR_MAXLEN] = {
 	GIT_COLOR_NORMAL, /* WT_STATUS_HEADER */
@@ -637,10 +638,13 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt
 static void wt_status_print_other(struct wt_status *s,
 				  struct string_list *l,
 				  const char *what,
-				  const char *how)
+				  const char *how,
+				  int colopts)
 {
 	int i;
 	struct strbuf buf = STRBUF_INIT;
+	static struct string_list output = STRING_LIST_INIT_DUP;
+	struct column_options copts;
 
 	if (!l->nr)
 		return;
@@ -649,12 +653,32 @@ static void wt_status_print_other(struct wt_status *s,
 
 	for (i = 0; i < l->nr; i++) {
 		struct string_list_item *it;
+		const char *path;
 		it = &(l->items[i]);
+		path = quote_path(it->string, strlen(it->string),
+				  &buf, s->prefix);
+		if (colopts & COL_ENABLED) {
+			add_cell_to_list(&output, colopts, path);
+			continue;
+		}
 		status_printf(s, color(WT_STATUS_HEADER, s), "\t");
 		status_printf_more(s, color(WT_STATUS_UNTRACKED, s),
-			"%s\n", quote_path(it->string, strlen(it->string),
-					    &buf, s->prefix));
+				   "%s\n", path);
 	}
+
+	strbuf_release(&buf);
+	if ((colopts & COL_ENABLED) == 0)
+		return;
+
+	strbuf_addf(&buf, "%s#\t%s",
+		    color(WT_STATUS_HEADER,s),
+		    color(WT_STATUS_UNTRACKED, s));
+	memset(&copts, 0, sizeof(copts));
+	copts.padding = 1;
+	copts.indent = buf.buf;
+	copts.nl = GIT_COLOR_RESET "\n";
+	print_columns(&output, colopts, &copts);
+	string_list_clear(&output, 0);
 	strbuf_release(&buf);
 }
 
@@ -704,7 +728,7 @@ static void wt_status_print_tracking(struct wt_status *s)
 	color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "#");
 }
 
-void wt_status_print(struct wt_status *s)
+void wt_status_print(struct wt_status *s, int colopts)
 {
 	const char *branch_color = color(WT_STATUS_ONBRANCH, s);
 	const char *branch_status_color = color(WT_STATUS_HEADER, s);
@@ -742,9 +766,11 @@ void wt_status_print(struct wt_status *s)
 		wt_status_print_submodule_summary(s, 1);  /* unstaged */
 	}
 	if (s->show_untracked_files) {
-		wt_status_print_other(s, &s->untracked, _("Untracked"), "add");
+		wt_status_print_other(s, &s->untracked,
+				      _("Untracked"), "add", colopts);
 		if (s->show_ignored_files)
-			wt_status_print_other(s, &s->ignored, _("Ignored"), "add -f");
+			wt_status_print_other(s, &s->ignored,
+					      _("Ignored"), "add -f", colopts);
 	} else if (s->commitable)
 		status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"),
 			advice_status_hints
diff --git a/wt-status.h b/wt-status.h
index 682b4c8..4ab2799 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -69,7 +69,7 @@ struct wt_status {
 };
 
 void wt_status_prepare(struct wt_status *s);
-void wt_status_print(struct wt_status *s);
+void wt_status_print(struct wt_status *s, int colopts);
 void wt_status_collect(struct wt_status *s);
 
 void wt_shortstatus_print(struct wt_status *s, int null_termination, int show_branch);
-- 
1.7.8.36.g69ee2
Previous: Nguyen Thai Ngoc DuyNext: Junio C Hamano
Message 22 of 43 in “Column display again”
  1. 00/13 Column display againNguyễn Thái Ngọc Duy, Feb 3, 2012
  2. 01/13 Save terminal width before setting up pagerNguyễn Thái Ngọc Duy, Feb 3, 2012
  3. 02/13 column: add API to print items in columnsNguyễn Thái Ngọc Duy, Feb 3, 2012
  4. Junio C HamanoFeb 3, 2012
  5. Junio C HamanoFeb 3, 2012
  6. 03/13 parseopt: make OPT_INTEGER support hexadecimal as wellNguyễn Thái Ngọc Duy, Feb 3, 2012
  7. Junio C HamanoFeb 3, 2012
  8. Nguyen Thai Ngoc DuyFeb 4, 2012
  9. Junio C HamanoFeb 4, 2012
  10. Nguyen Thai Ngoc DuyFeb 4, 2012
  11. 04/13 Add git-column and column mode parsingNguyễn Thái Ngọc Duy, Feb 3, 2012
  12. 05/13 Stop starting pager recursivelyNguyễn Thái Ngọc Duy, Feb 3, 2012
  13. 06/13 column: add columnar layoutNguyễn Thái Ngọc Duy, Feb 3, 2012
  14. 07/13 column: support columns with different widthsNguyễn Thái Ngọc Duy, Feb 3, 2012
  15. 08/13 column: add column.ui for default column output settingsNguyễn Thái Ngọc Duy, Feb 3, 2012
  16. Junio C HamanoFeb 3, 2012
  17. 09/13 help: reuse print_columns() for help -aNguyễn Thái Ngọc Duy, Feb 3, 2012
  18. Junio C HamanoFeb 3, 2012
  19. 10/13 branch: add --columnNguyễn Thái Ngọc Duy, Feb 3, 2012
  20. Junio C HamanoFeb 3, 2012
  21. Nguyen Thai Ngoc DuyFeb 4, 2012
  22. 11/13 status: add --columnNguyễn Thái Ngọc Duy, Feb 3, 2012
  23. Junio C HamanoFeb 3, 2012
  24. 12/13 column: support piping stdout to external git-column processNguyễn Thái Ngọc Duy, Feb 3, 2012
  25. 13/13 tag: add --columnNguyễn Thái Ngọc Duy, Feb 3, 2012
  26. Junio C HamanoFeb 3, 2012
  27. 00/12 Column displayNguyễn Thái Ngọc Duy, Feb 4, 2012
  28. 01/12 Save terminal width before setting up pagerNguyễn Thái Ngọc Duy, Feb 4, 2012
  29. 02/12 column: add API to print items in columnsNguyễn Thái Ngọc Duy, Feb 4, 2012
  30. 03/12 Add git-column and column mode parsingNguyễn Thái Ngọc Duy, Feb 4, 2012
  31. 03/12 Add git-column and column mode parsingNguyễn Thái Ngọc Duy, Feb 4, 2012
  32. 04/12 Stop starting pager recursivelyNguyễn Thái Ngọc Duy, Feb 4, 2012
  33. 05/12 column: add columnar layoutNguyễn Thái Ngọc Duy, Feb 4, 2012
  34. 06/12 column: support columns with different widthsNguyễn Thái Ngọc Duy, Feb 4, 2012
  35. 07/12 column: add column.ui for default column output settingsNguyễn Thái Ngọc Duy, Feb 4, 2012
  36. 07/12 column: add column.ui for default column output settingsNguyễn Thái Ngọc Duy, Feb 4, 2012
  37. 08/12 help: reuse print_columns() for help -aNguyễn Thái Ngọc Duy, Feb 4, 2012
  38. 09/12 branch: add --columnNguyễn Thái Ngọc Duy, Feb 4, 2012
  39. Junio C HamanoFeb 6, 2012
  40. 10/12 status: add --columnNguyễn Thái Ngọc Duy, Feb 4, 2012
  41. 11/12 column: support piping stdout to external git-column processNguyễn Thái Ngọc Duy, Feb 4, 2012
  42. 12/12 tag: add --columnNguyễn Thái Ngọc Duy, Feb 4, 2012
  43. Junio C HamanoFeb 6, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.