[PATCH 9/9] for-each-ref: support %(...:aligned) for left alignment
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
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
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