Hi again.
attached is a minimal example to reproduce this:
It seems to happen only in combination with Culumn widgets.
There are two notable things with this example:
First, the length of the encoded string `problematic` is of course 3,
so the column will get displayed with fixed length 3, which is not what I want.
Secondly, if you comment out the .encode('utf-8') in line 4, the length of the 
string
becomes 1, and then urwid diverges before displaying anything.
/p

On Aug 17, Patrick Totzke wrote:
>`
>Hi!
>
>I'm currently seing strange behaviour with Text widgets in combination with
>utf-8 and unicode strings:
>For certain symbols, like 'ιΆ–', urwid craches when displaying them (stacktrace 
>below).
>But if i encode this to utf08 before handing it to urwid.Text,
>Its length gets calculated falsely:
>>s=u'\u9896'.encode('utf-8')
>> len(s) = 3
>so I get two whitespaces after the symbol on my screen..
>Best,
>/p
>
>
>
>
>
>   self.mainloop.run()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 271, in run
>    self.screen.run_wrapper(self._run)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/raw_display.py",
>  line 228, in run_wrapper
>    return fn()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 292, in _run
>    self.event_loop.run()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 667, in run
>    self._loop()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 696, in _loop
>    self._entering_idle()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 617, in _entering_idle
>    callback()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 482, in entering_idle
>    self.draw_screen()
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/main_loop.py",
>  line 493, in draw_screen
>    canvas = self._topmost_widget.render(self.screen_size, focus=True)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/container.py",
>  line 586, in render
>    focus and self.focus_part == 'body')
>  File "/home/pazz/projects/alot/alot/buffer.py", line 41, in render
>    return self.body.render(size, focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/listbox.py",
>  line 346, in render
>    focus_canvas = focus_widget.render((maxcol,), focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File "/home/pazz/projects/alot/alot/widgets.py", line 89, in render
>    return urwid.AttrMap.render(self, size, focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/decoration.py",
>  line 208, in render
>    canv = self._original_widget.render(size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/container.py",
>  line 1218, in render
>    focus = focus and self.focus_col == i)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/decoration.py",
>  line 208, in render
>    canv = self._original_widget.render(size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 131, in cached_render
>    canv = fn(self, size, focus=focus)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/widget.py",
>  line 622, in render
>    return apply_text_layout(text, attr, trans, maxcol)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/canvas.py",
>  line 1249, in apply_text_layout
>    s = LayoutSegment(seg)
>  File 
> "/usr/local/lib/python2.7/dist-packages/urwid-1.0.0-py2.7-linux-x86_64.egg/urwid/text_layout.py",
>  line 259, in __init__
>    assert self.sc > 0, repr(seg)
>AssertionError: (0, 0, 0)
>
#! /usr/bin/env python

import urwid
problematic = u'\u9896'#.encode('utf-8')
print len(problematic)
cols = []
cols.append(('fixed', len(problematic), urwid.Text(problematic)))
cols.append(urwid.Text('|rest'))
mainloop = urwid.MainLoop(urwid.Filler(urwid.Columns(cols)))
mainloop.run()
_______________________________________________
Urwid mailing list
[email protected]
http://lists.excess.org/mailman/listinfo/urwid

Reply via email to