summaryrefslogtreecommitdiff
path: root/alot
diff options
context:
space:
mode:
authorPatrick Totzke <patricktotzke@gmail.com>2018-07-06 10:28:53 +0100
committerPatrick Totzke <patricktotzke@gmail.com>2018-07-24 22:07:43 +0100
commitb9fb35dec2642fc3b132e2a16649d392bea2858f (patch)
treeb1b4d86b3a6fac231f035751e180fa0a3d5f2bbf /alot
parent62b778180f46c3ee706657437b413acda098eef0 (diff)
fix wide characters in search mode
this will cause the width of a (author/tag/..) string in a threadline widget to be computed by urwids `Widget.pack` function rather than just taking the length of the string. This fixes an issue with utf-8 wide characters such as Kanji, fow which urwid needs extra space, and consequently adds additional rows when packing such Textwidgets into Columns as we do in threadlines.
Diffstat (limited to 'alot')
-rw-r--r--alot/widgets/search.py26
1 files changed, 16 insertions, 10 deletions
diff --git a/alot/widgets/search.py b/alot/widgets/search.py
index 130fbecc..be0ac22c 100644
--- a/alot/widgets/search.py
+++ b/alot/widgets/search.py
@@ -56,8 +56,9 @@ class ThreadlineWidget(urwid.AttrMap):
if newest is not None:
datestring = settings.represent_datetime(newest)
datestring = pad(datestring)
- width = len(datestring)
- part = AttrFlipWidget(urwid.Text(datestring), struct['date'])
+ text = urwid.Text(datestring)
+ width = text.pack()[0]
+ part = AttrFlipWidget(text, struct['date'])
elif name == 'mailcount':
if self.thread:
@@ -65,8 +66,9 @@ class ThreadlineWidget(urwid.AttrMap):
else:
mailcountstring = "(?)"
mailcountstring = pad(mailcountstring)
- width = len(mailcountstring)
- mailcount_w = AttrFlipWidget(urwid.Text(mailcountstring),
+ text = urwid.Text(mailcountstring)
+ width = text.pack()[0]
+ mailcount_w = AttrFlipWidget(text,
struct['mailcount'])
part = mailcount_w
elif name == 'authors':
@@ -75,9 +77,10 @@ class ThreadlineWidget(urwid.AttrMap):
else:
authors = '(None)'
authorsstring = pad(authors, shorten_author_string)
- authors_w = AttrFlipWidget(urwid.Text(authorsstring),
+ text = urwid.Text(authorsstring)
+ width = text.pack()[0]
+ authors_w = AttrFlipWidget(text,
struct['authors'])
- width = len(authorsstring)
part = authors_w
elif name == 'subject':
@@ -90,10 +93,12 @@ class ThreadlineWidget(urwid.AttrMap):
subjectstring = subjectstring.replace('\r', '')
subjectstring = pad(subjectstring)
- subject_w = AttrFlipWidget(urwid.Text(subjectstring, wrap='clip'),
+ text = urwid.Text(subjectstring, wrap='clip')
+ width = text.pack()[0]
+
+ subject_w = AttrFlipWidget(text,
struct['subject'])
if subjectstring:
- width = len(subjectstring)
part = subject_w
elif name == 'content':
@@ -105,9 +110,10 @@ class ThreadlineWidget(urwid.AttrMap):
msgs.sort(key=lambda msg: msg.get_date(), reverse=True)
lastcontent = ' '.join([m.get_text_content() for m in msgs])
contentstring = pad(lastcontent.replace('\n', ' ').strip())
- content_w = AttrFlipWidget(urwid.Text(contentstring, wrap='clip'),
+ text = urwid.Text(contentstring, wrap='clip'),
+ width = text.pack()[0]
+ content_w = AttrFlipWidget(text,
struct['content'])
- width = len(contentstring)
part = content_w
elif name == 'tags':
if self.thread: