git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Andy Parkins <andyparkins@gmail.com>
To: git@vger.kernel.org
Subject: [PATCH] Colourise git-branch output
Date: Fri, 3 Nov 2006 12:06:12 +0000	[thread overview]
Message-ID: <200611031206.12515.andyparkins@gmail.com> (raw)
In-Reply-To: <200611031052.16095.andyparkins@gmail.com>

I wanted to have a visual indication of which branches are local and which are
remote in git-branch -a output; however Junio was concerned that someone might
be using the output in a script.  This patch addresses the problem by colouring
the git-branch output - which in "auto" mode won't be activated.

I've based it off the colouring code for builtin-diff.c; which means there is a
branch.color configuration variable that needs setting to something before the
color will appear.

This patch chooses green for local, red for remote and bold green for current.

As yet, there is no support for changing the colors using the config file; but
it wouldn't be hard to add.

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
---
 builtin-branch.c |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/builtin-branch.c b/builtin-branch.c
index 6dd33ee..de7f81e 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -5,6 +5,7 @@
  * Based on git-branch.sh by Junio C Hamano.
  */
 
+#include "color.h"
 #include "cache.h"
 #include "refs.h"
 #include "commit.h"
@@ -17,6 +18,38 @@ static const char builtin_branch_usage[]
 static const char *head;
 static unsigned char head_sha1[20];
 
+static int branch_use_color;
+static char branch_colors[][COLOR_MAXLEN] = {
+	"\033[m",	/* reset */
+	"",		/* PLAIN (normal) */
+	"\033[31m",	/* REMOTE (red) */
+	"\033[32m",	/* LOCAL (green) */
+	"\033[1;32m",	/* CURRENT (boldgreen) */
+};
+enum color_branch {
+	COLOR_BRANCH_RESET = 0,
+	COLOR_BRANCH_PLAIN = 1,
+	COLOR_BRANCH_REMOTE = 2,
+	COLOR_BRANCH_LOCAL = 3,
+	COLOR_BRANCH_CURRENT = 4,
+};
+
+int git_branch_config(const char *var, const char *value)
+{
+	if (!strcmp(var, "branch.color")) {
+		branch_use_color = git_config_colorbool(var, value);
+		return 0;
+	}
+	return git_default_config(var, value);
+}
+
+const char *branch_get_color(enum color_branch ix)
+{
+	if (branch_use_color)
+		return branch_colors[ix];
+	return "";
+}
+
 static int in_merge_bases(const unsigned char *sha1,
 			  struct commit *rev1,
 			  struct commit *rev2)
@@ -157,6 +190,7 @@ static void print_ref_list( int type_wan
 	int i;
 	char c;
 	struct ref_list ref_list;
+	int color;
 
 	memset( &ref_list, 0, sizeof( ref_list ) );
 	ref_list.type_wanted = type_wanted;
@@ -165,11 +199,28 @@ static void print_ref_list( int type_wan
 	qsort(ref_list.list, ref_list.index, sizeof(struct ref_item), ref_cmp);
 
 	for (i = 0; i < ref_list.index; i++) {
+		switch( ref_list.list[i].type ) {
+			case REF_LOCAL_BRANCH:
+				color = COLOR_BRANCH_LOCAL;
+				break;
+			case REF_REMOTE_BRANCH:
+				color = COLOR_BRANCH_REMOTE;
+				break;
+			default:
+				color = COLOR_BRANCH_PLAIN;
+				break;
+		}
+
 		c = ' ';
-		if (!strcmp(ref_list.list[i].name, head))
+		if (!strcmp(ref_list.list[i].name, head)) {
 			c = '*';
+			color = COLOR_BRANCH_CURRENT;
+		}
 
-		printf("%c %s\n", c, ref_list.list[i].name);
+		printf("%c %s%s%s\n", c,
+				branch_get_color(color),
+				ref_list.list[i].name,
+				branch_get_color(COLOR_BRANCH_RESET));
 	}
 
 	tidy_ref_list( &ref_list );
@@ -219,7 +270,7 @@ int cmd_branch(int argc, const char **ar
 	int i;
 	int type_wanted = REF_LOCAL_BRANCH;
 
-	git_config(git_default_config);
+	git_config(git_branch_config);
 
 	for (i = 1; i < argc; i++) {
 		const char *arg = argv[i];
-- 
1.4.3.2

  reply	other threads:[~2006-11-03 12:06 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bec6ab7849e3fcacac23cca44a0ba93282af5fca.1162465753.git.andyparkins@gmail.com>
2006-11-02 11:11 ` [PATCH 2/4] Rename remote_only to display_mode Andy Parkins
2006-11-03  2:40   ` Junio C Hamano
2006-11-03  8:40     ` Andy Parkins
2006-11-03 10:51       ` Andreas Ericsson
2006-11-03 11:51         ` Junio C Hamano
2006-11-03 12:37           ` Andy Parkins
2006-11-03 12:00         ` Andy Parkins
2006-11-03 13:23           ` Andreas Ericsson
2006-11-03 10:52     ` [PATCH] Add support to git-branch to show local and remote branches Andy Parkins
2006-11-03 12:06       ` Andy Parkins [this message]
2006-11-03 19:25         ` [PATCH] Colourise git-branch output Junio C Hamano
2006-11-03 23:05           ` Alex Riesen
2006-11-03 12:08       ` [PATCH] Add support to git-branch to show local and remote branches Junio C Hamano
2006-11-03 12:40         ` Andy Parkins
2006-11-03 19:19           ` Junio C Hamano
2006-11-02 11:11 ` [PATCH 3/4] Default to displaying /all/ non-tag refs, not just locals Andy Parkins
2006-11-03  2:40   ` Junio C Hamano
2006-11-03  8:47     ` Andy Parkins
2006-11-03 10:55       ` Andreas Ericsson
2006-11-02 11:11 ` [PATCH 4/4] Show the branch type after the branch name for remotes Andy Parkins
2006-11-03  2:40   ` Junio C Hamano
2006-11-03  8:33     ` Andy Parkins
2006-11-03 20:08       ` Junio C Hamano
2006-12-11 22:10 [PATCH] Colourise git-branch output Andy Parkins
2006-12-11 22:47 ` Junio C Hamano
2006-12-12  0:38 ` Sean
2006-12-12  1:11   ` Junio C Hamano
2006-12-12  1:24     ` Sean
2006-12-12  3:39       ` Linus Torvalds
2006-12-12  5:07         ` Junio C Hamano
2006-12-12  5:41           ` Linus Torvalds
2006-12-12  7:58             ` Junio C Hamano
  -- strict thread matches above, loose matches on Subject: below --
2006-12-12  6:41 Andy Parkins
2006-12-12  8:46 ` Johannes Sixt
2006-12-12 10:10   ` Junio C Hamano
2006-12-12 11:03     ` Andy Parkins
2006-12-12 18:43       ` Junio C Hamano
2006-12-12 18:43 ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200611031206.12515.andyparkins@gmail.com \
    --to=andyparkins@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).