summaryrefslogtreecommitdiff
path: root/alot/buffers
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-01-09 12:50:13 +0100
committerAnton Khirnov <anton@khirnov.net>2021-01-09 12:50:13 +0100
commit47ebd7656057fadb5b627dfc1844bc09dc171ff2 (patch)
tree47eb2797d0206fd02347cceeff7be3c6a97a3d46 /alot/buffers
parentb190bf2980ce8944bdf2620e2c6442559712fdc2 (diff)
buffers/thread: more sophisticated heuristics for default weights
Should produce better results in most situations.
Diffstat (limited to 'alot/buffers')
-rw-r--r--alot/buffers/thread.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/alot/buffers/thread.py b/alot/buffers/thread.py
index 1e751f1a..47b7f9d0 100644
--- a/alot/buffers/thread.py
+++ b/alot/buffers/thread.py
@@ -23,6 +23,9 @@ class ThreadBuffer(Buffer):
modename = 'thread'
+ ui = None
+ thread = None
+
# list of the widgets containing the message body
# indexed by its depth-first position in the thread tree
_msg_widgets = None
@@ -34,11 +37,12 @@ class ThreadBuffer(Buffer):
# WidgetPlaceholder that wraps currently displayed message
_cur_msg_holder = None
- def __init__(self, thread):
+ def __init__(self, ui, thread):
"""
:param thread: thread to display
:type thread: :class:`~alot.db.Thread`
"""
+ self.ui = ui
self.thread = thread
self._indent_width = settings.get('thread_indent_replies')
@@ -121,10 +125,15 @@ class ThreadBuffer(Buffer):
self._msg_widgets.append(msg_wgt)
list_walker.append(wgt)
- # the weight given to the thread-tree widget is proportional to the number of
- # messages in it plus 1 (for surrounding decoration), up to the limit of
- # 49 messages, when it is equal to the message body widget
- tree_weight = min(0.01 * (len(self._msg_widgets) + 1), 0.5)
+ # approximate weight for one terminal line
+ # substract 3 for decoration and panels
+ line_weight = 1.0 / max(self.ui.get_cols_rows()[1] - 3, 1)
+
+ # the default weight given to the thread-tree widget is proportional to
+ # the number of messages in it plus 2 (for surrounding decoration) -
+ # scaled to approximately one line per message - up to maximum weight of
+ # half the screen
+ tree_weight = min(line_weight * (len(self._msg_widgets) + 2), 0.5)
self.msgtree_weight = tree_weight
if len(self._msg_widgets) > 0: