summaryrefslogtreecommitdiff
path: root/alot/widgets/search.py
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/widgets/search.py
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/widgets/search.py')
-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: