#1029591 alot: traceback when pressing H on shown headers

#1029591#5
Date:
2023-01-25 02:45:01 UTC
From:
To:
When I open a message, press H to show the headers, then scroll down
into the headers, then press H again within the headers, then I get a
crash of alot with the following Python traceback. This could be a bug
in urwid or it could be a bug in alot allowing something it shouldn't,
please reassign it to the appropriate package.

   $ alot
   Traceback (most recent call last):
     File "/usr/bin/alot", line 33, in <module>
       sys.exit(load_entry_point('alot==0.10', 'console_scripts', 'alot')())
     File "/usr/share/alot/alot/__main__.py", line 137, in main
       UI(dbman, cmdstring)
     File "/usr/share/alot/alot/ui.py", line 146, in __init__
       self.mainloop.run()
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 287, in run
       self._run()
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 385, in _run
       self.event_loop.run()
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 1346, in run
       reraise(*exc_info)
     File "/usr/lib/python3/dist-packages/urwid/compat.py", line 58, in reraise
       raise value
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 1360, in wrapper
       rval = f(*args,**kargs)
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 1319, in _twisted_idle_callback
       callback()
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 574, in entering_idle
       self.draw_screen()
     File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 588, in draw_screen
       canvas = self._topmost_widget.render(self.screen_size, focus=True)
     File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
       canv = fn(self, size, focus=focus)
     File "/usr/lib/python3/dist-packages/urwid/decoration.py", line 226, in render
       canv = self._original_widget.render(size, focus=focus)
     File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
       canv = fn(self, size, focus=focus)
     File "/usr/lib/python3/dist-packages/urwid/container.py", line 1089, in render
       body = self.body.render((maxcol, maxrow-ftrim-htrim),
     File "/usr/share/alot/alot/buffers/thread.py", line 138, in render
       return self.body.render(size, focus)
     File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
       canv = fn(self, size, focus=focus)
     File "/usr/lib/python3/dist-packages/urwid/widget.py", line 1761, in render
       canv = get_delegate(self).render(size, focus=focus)
     File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
       canv = fn(self, size, focus=focus)
     File "/usr/lib/python3/dist-packages/urwid/listbox.py", line 439, in render
       middle, top, bottom = self.calculate_visible(
     File "/usr/lib/python3/dist-packages/urwid/listbox.py", line 322, in calculate_visible
       self._set_focus_complete( (maxcol, maxrow), focus )
     File "/usr/lib/python3/dist-packages/urwid/listbox.py", line 703, in _set_focus_complete
       middle,top,bottom=self.calculate_visible((maxcol,maxrow),focus)
     File "/usr/lib/python3/dist-packages/urwid/listbox.py", line 325, in calculate_visible
       focus_widget, focus_pos = self._body.get_focus()
     File "/usr/lib/python3/dist-packages/urwidtrees/widgets.py", line 75, in get_focus
       return self._get(self._focus)
     File "/usr/lib/python3/dist-packages/urwidtrees/widgets.py", line 68, in _get
       res = self[pos], pos
     File "/usr/lib/python3/dist-packages/urwidtrees/widgets.py", line 54, in __getitem__
       entry = self._tree.get_decorated(pos)
     File "/usr/lib/python3/dist-packages/urwidtrees/nested.py", line 88, in get_decorated
       return self._get_decorated_entry(self._tree, pos)
     File "/usr/lib/python3/dist-packages/urwidtrees/nested.py", line 84, in _get_decorated_entry
       entry = tree.decorate(pos[0], entry, is_first=isf)
     File "/usr/lib/python3/dist-packages/urwidtrees/decoration.py", line 472, in decorate
       line = urwid.Columns(cols, box_columns=range(len(cols))[:-1])
     File "/usr/lib/python3/dist-packages/urwid/container.py", line 1787, in __init__
       self.contents.append((w, (WEIGHT, 1, i in box_columns)))
     File "/usr/lib/python3/dist-packages/urwid/monitored_list.py", line 384, in append
       rval = super(MonitoredFocusList, self).append(item)
     File "/usr/lib/python3/dist-packages/urwid/monitored_list.py", line 30, in call_modified_wrapper
       self._modified()
     File "/usr/lib/python3/dist-packages/urwid/container.py", line 1821, in _contents_modified
       self._selectable = any(w.selectable() for w, o in self.contents)
     File "/usr/lib/python3/dist-packages/urwid/container.py", line 1821, in <genexpr>
       self._selectable = any(w.selectable() for w, o in self.contents)
   AttributeError: 'NoneType' object has no attribute 'selectable'