# HG changeset patch # User FUJIWARA Katsunori # Date 2014-07-05 17:56:41 # Node ID f9c91c638378f31eb73ee34a0c707bb42bfaed5a # Parent ba7f75e7f4e52b5abe565bb38aad19af04859637 progress: use 'encoding.colwidth' to get column width of items correctly Before this patch, 'progress' extension applies 'len' on byte sequence to get column width of it, but it causes incorrect result, when length of byte sequence and columns in display are different from each other in multi-byte characters. This patch uses 'encoding.colwidth' to get column width of items in output line correctly, even if it contains multi-byte characters. diff --git a/hgext/progress.py b/hgext/progress.py --- a/hgext/progress.py +++ b/hgext/progress.py @@ -142,7 +142,7 @@ class progbar(object): add = encoding.trim(item, wid, leftside=True) else: add = encoding.trim(item, wid) - add += (wid - len(add)) * ' ' + add += (wid - encoding.colwidth(add)) * ' ' elif indicator == 'bar': add = '' needprogress = True diff --git a/tests/test-progress.t b/tests/test-progress.t --- a/tests/test-progress.t +++ b/tests/test-progress.t @@ -304,6 +304,7 @@ from each other. $ cat >> loop.py < # use non-ascii characters as loop items of progress > loopitems = [ + > u'\u3042\u3044'.encode('utf-8'), # 2 x 2 = 4 columns > u'\u3042\u3044\u3046'.encode('utf-8'), # 2 x 3 = 6 columns > u'\u3042\u3044\u3046\u3048'.encode('utf-8'), # 2 x 4 = 8 columns > ] @@ -317,8 +318,9 @@ from each other. > format = item+6 > EOF - $ hg --encoding utf-8 -y loop --total 2 2 + $ hg --encoding utf-8 -y loop --total 3 3 \r (no-eol) (esc) + \xe3\x81\x82\xe3\x81\x84 \r (no-eol) (esc) \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) \r (no-eol) (esc) @@ -329,8 +331,9 @@ from each other. > format = item-6 > EOF - $ hg --encoding utf-8 -y loop --total 2 2 + $ hg --encoding utf-8 -y loop --total 3 3 \r (no-eol) (esc) + \xe3\x81\x82\xe3\x81\x84 \r (no-eol) (esc) \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) \xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\r (no-eol) (esc) \r (no-eol) (esc)