Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > Branch names are usually in ASCII so they are not the problem. The > problem most likely comes from "(no branch)" translation, which is in > UTF-8 and makes length calculation just wrong. > > Update document to mention the fact that we may want ref names in > UTF-8. Encodings that produce invalid UTF-8 are safe as utf8_strwidth() > falls back to strlen(). The ones that incidentally produce valid UTF-8 > sequences will cause misalignment. > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > ... > @@ -533,7 +535,7 @@ static void show_detached(struct ref_list *ref_list) > if (head_commit && is_descendant_of(head_commit, ref_list->with_commit)) { > struct ref_item item; > item.name = xstrdup(_("(no branch)")); > - item.len = strlen(item.name); > + item.len = utf8_strwidth(item.name); > item.kind = REF_LOCAL_BRANCH; > item.dest = NULL; > item.commit = head_commit; We should probably rename the "len" field, as it is no longer about the length (i.e. that which strlen() returns); it is the display width, and is better called "cols", "width" or somesuch. I'll squash-in the following. Thanks. builtin/branch.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git c/builtin/branch.c w/builtin/branch.c index 73ff7e7..4ec556f 100644 --- c/builtin/branch.c +++ w/builtin/branch.c @@ -250,7 +250,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds, struct ref_item { char *name; char *dest; - unsigned int kind, len; + unsigned int kind, width; struct commit *commit; }; @@ -355,14 +355,14 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags, newitem->name = xstrdup(refname); newitem->kind = kind; newitem->commit = commit; - newitem->len = utf8_strwidth(refname); + newitem->width = utf8_strwidth(refname); newitem->dest = resolve_symref(orig_refname, prefix); /* adjust for "remotes/" */ if (newitem->kind == REF_REMOTE_BRANCH && ref_list->kinds != REF_REMOTE_BRANCH) - newitem->len += 8; - if (newitem->len > ref_list->maxwidth) - ref_list->maxwidth = newitem->len; + newitem->width += 8; + if (newitem->width > ref_list->maxwidth) + ref_list->maxwidth = newitem->width; return 0; } @@ -521,8 +521,8 @@ static int calc_maxwidth(struct ref_list *refs) for (i = 0; i < refs->index; i++) { if (!matches_merge_filter(refs->list[i].commit)) continue; - if (refs->list[i].len > w) - w = refs->list[i].len; + if (refs->list[i].width > w) + w = refs->list[i].width; } return w; } @@ -535,12 +535,12 @@ static void show_detached(struct ref_list *ref_list) if (head_commit && is_descendant_of(head_commit, ref_list->with_commit)) { struct ref_item item; item.name = xstrdup(_("(no branch)")); - item.len = utf8_strwidth(item.name); + item.width = utf8_strwidth(item.name); item.kind = REF_LOCAL_BRANCH; item.dest = NULL; item.commit = head_commit; - if (item.len > ref_list->maxwidth) - ref_list->maxwidth = item.len; + if (item.width > ref_list->maxwidth) + ref_list->maxwidth = item.width; print_ref_item(&item, ref_list->maxwidth, ref_list->verbose, ref_list->abbrev, 1, ""); free(item.name); } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html