Mercurial > hg
changeset 21863:f9c91c638378
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.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sun, 06 Jul 2014 02:56:41 +0900 |
parents | ba7f75e7f4e5 |
children | 755bf1bbe0a9 |
files | hgext/progress.py tests/test-progress.t |
diffstat | 2 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/progress.py Sun Jul 06 02:56:41 2014 +0900 +++ b/hgext/progress.py Sun Jul 06 02:56:41 2014 +0900 @@ -142,7 +142,7 @@ 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
--- a/tests/test-progress.t Sun Jul 06 02:56:41 2014 +0900 +++ b/tests/test-progress.t Sun Jul 06 02:56:41 2014 +0900 @@ -304,6 +304,7 @@ $ cat >> loop.py <<EOF > # 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 @@ > 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 @@ > 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)