[PATCH 9/9] for-each-ref: support %(...:aligned) for left alignment

2013-05-19 Thread Nguyễn Thái Ngọc Duy

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 builtin/for-each-ref.c | 25 ++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 1390da8..3240ca0 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -11,6 +11,7 @@
 #include remote.h
 #include color.h
 #include branch.h
+#include utf8.h
 
 /* Quoting styles */
 #define QUOTE_NONE 0
@@ -733,7 +734,7 @@ static void populate_value(struct refinfo *ref)
/* look for short refname format */
if (formatp) {
formatp++;
-   if (!strcmp(formatp, short))
+   if (!prefixcmp(formatp, short))
refname = shorten_unambiguous_ref(refname,
  warn_ambiguous_refs);
else
@@ -994,7 +995,7 @@ static void show_refs(struct refinfo **refs, int maxcount,
 {
struct strbuf *sb;
const char *cp, *sp, *ep;
-   int i, atom;
+   int i, atom, aligned, max_length, len;
 
sb = xmalloc(sizeof(*sb) * maxcount);
for (i = 0; i  maxcount; i++) {
@@ -1012,8 +1013,26 @@ static void show_refs(struct refinfo **refs, int 
maxcount,
emit(sb + i, cp, sp);
}
atom = parse_atom(sp + 2, ep);
-   for (i = 0; i  maxcount; i++)
+   aligned = !suffixcmp(used_atom[atom], :aligned);
+   for (i = 0, max_length = 0; aligned  i  maxcount; i++) {
+   struct atom_value *v;
+   get_value(refs[i], atom, v);
+   len = utf8_strnwidth(v-s, -1, 1);
+   if (len  max_length)
+   max_length = len;
+   }
+   for (i = 0; i  maxcount; i++) {
+   int old_len = sb[i].len;
print_value(sb + i, refs[i], atom, quote_style);
+   if (aligned) {
+   len = max_length -
+   utf8_strnwidth(sb[i].buf + old_len, -1, 
1);
+   while (len) {
+   strbuf_addch(sb + i, ' ');
+   len--;
+   }
+   }
+   }
}
if (*cp) {
sp = cp + strlen(cp);
-- 
1.8.2.83.gc99314b

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 9/9] for-each-ref: support %(...:aligned) for left alignment

2013-05-19 Thread Ramkumar Ramachandra
I don't think [7/9] and [8/9] belong in this series.  Let's see how
you've used it in :aligned.

Nguyễn Thái Ngọc Duy wrote:
 diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
 index 1390da8..3240ca0 100644
 --- a/builtin/for-each-ref.c
 +++ b/builtin/for-each-ref.c
 @@ -1012,8 +1013,26 @@ static void show_refs(struct refinfo **refs, int 
 maxcount,
 emit(sb + i, cp, sp);
 }
 atom = parse_atom(sp + 2, ep);
 -   for (i = 0; i  maxcount; i++)
 +   aligned = !suffixcmp(used_atom[atom], :aligned);
 +   for (i = 0, max_length = 0; aligned  i  maxcount; i++) {
 +   struct atom_value *v;
 +   get_value(refs[i], atom, v);
 +   len = utf8_strnwidth(v-s, -1, 1);
 +   if (len  max_length)
 +   max_length = len;

Why?!  Why are you denying me the pleasure of using %, %|, %, %|,
%, %|, %, and %| that you invented in pretty?  The code is
already there: you just have to hook it up.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 9/9] for-each-ref: support %(...:aligned) for left alignment

2013-05-19 Thread Duy Nguyen
On Sun, May 19, 2013 at 6:32 PM, Ramkumar Ramachandra
artag...@gmail.com wrote:
 I don't think [7/9] and [8/9] belong in this series.  Let's see how
 you've used it in :aligned.

 Nguyễn Thái Ngọc Duy wrote:
 diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
 index 1390da8..3240ca0 100644
 --- a/builtin/for-each-ref.c
 +++ b/builtin/for-each-ref.c
 @@ -1012,8 +1013,26 @@ static void show_refs(struct refinfo **refs, int 
 maxcount,
 emit(sb + i, cp, sp);
 }
 atom = parse_atom(sp + 2, ep);
 -   for (i = 0; i  maxcount; i++)
 +   aligned = !suffixcmp(used_atom[atom], :aligned);
 +   for (i = 0, max_length = 0; aligned  i  maxcount; i++) {
 +   struct atom_value *v;
 +   get_value(refs[i], atom, v);
 +   len = utf8_strnwidth(v-s, -1, 1);
 +   if (len  max_length)
 +   max_length = len;

 Why?!  Why are you denying me the pleasure of using %, %|, %, %|,
 %, %|, %, and %| that you invented in pretty?  The code is
 already there: you just have to hook it up.

Because for-each-ref only understands %(...) not %|, i.e. % followed
by a (. We need more changes in for-each-ref code to make it accept
%|, I think. Also %|(N) needs N. In case of branch -v that
should be calculated automatically, so we need a syntax to say align
to the left, use the smallest width that fits all. I guess %|(*)?
--
Duy
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html