diff options
author | Patrick Totzke <patricktotzke@gmail.com> | 2013-03-03 12:26:30 +0000 |
---|---|---|
committer | Patrick Totzke <patricktotzke@gmail.com> | 2013-03-03 13:50:19 +0000 |
commit | 987ac94d0615e6558807924e04ec3890cc50ea97 (patch) | |
tree | d34878cd5044ae39dc2c2c45ba24d1d3a60c139f /alot/buffers.py | |
parent | c841d22dd703978109a6fa855dc22b444a2896a9 (diff) |
implement Threadbuffer.focus_foo methods
to move the focus depending on the outmost tree of messages
(not the inner nested threes..)
Diffstat (limited to 'alot/buffers.py')
-rw-r--r-- | alot/buffers.py | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/alot/buffers.py b/alot/buffers.py index ac91f30f..48feb5f0 100644 --- a/alot/buffers.py +++ b/alot/buffers.py @@ -44,7 +44,7 @@ class Buffer(object): pass def keypress(self, size, key): - return self.body.keypress(size, key) + return self.body.keypress(size, key) def cleanup(self): """called before buffer is closed""" @@ -367,22 +367,77 @@ class ThreadBuffer(Buffer): for pos in self._tree.positions(): yield self._tree[pos] + # needed for ui.get_deep_focus.. def get_focus(self): return self.body.get_focus() def get_focus_position(self): - return self._sanitize_position((self.get_selected_mid(),)) + return self._sanitize_position((self.get_selected_mid(),)) def focus_first(self): self.body.set_focus(self._nested_tree.root) def _sanitize_position(self, pos): - return self._nested_tree._sanitize_position(pos, self._nested_tree._tree) + return self._nested_tree._sanitize_position(pos, self._nested_tree._tree) def focus_parent(self): mid = self.get_selected_mid() newpos = self._tree.parent_position(mid) - self.body.set_focus(self._sanitize_position((newpos,))) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + self.body.set_focus(newpos) + + def focus_first_reply(self): + mid = self.get_selected_mid() + newpos = self._tree.first_child_position(mid) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + self.body.set_focus(newpos) + + def focus_last_reply(self): + mid = self.get_selected_mid() + newpos = self._tree.last_child_position(mid) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + self.body.set_focus(newpos) + + def focus_next_sibling(self): + mid = self.get_selected_mid() + newpos = self._tree.next_sibling_position(mid) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + self.body.set_focus(newpos) + + def focus_prev_sibling(self): + mid = self.get_selected_mid() + localroot = self._sanitize_position((mid,)) + if localroot == self.get_focus()[1]: + newpos = self._tree.prev_sibling_position(mid) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + else: + newpos = localroot + if newpos is not None: + self.body.set_focus(newpos) + + def focus_next(self): + mid = self.get_selected_mid() + newpos = self._tree.next_position(mid) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + self.body.set_focus(newpos) + + def focus_prev(self): + mid = self.get_selected_mid() + localroot = self._sanitize_position((mid,)) + if localroot == self.get_focus()[1]: + newpos = self._tree.prev_position(mid) + if newpos is not None: + newpos = self._sanitize_position((newpos,)) + else: + newpos = localroot + if newpos is not None: + self.body.set_focus(newpos) def expand(self, msgpos): MT = self._tree[msgpos] |