summaryrefslogtreecommitdiff
path: root/alot/buffers/bufferlist.py
diff options
context:
space:
mode:
authorPatrick Totzke <patricktotzke@gmail.com>2018-06-19 10:40:07 +0100
committerPatrick Totzke <patricktotzke@gmail.com>2018-06-19 22:08:36 +0100
commitf0105c37556116c07f9f30c1fe960ea9e67e7229 (patch)
tree8642317be8306ea7c18ad62ef9146f507df95f9f /alot/buffers/bufferlist.py
parentd19615d2ac5bb23aca9068ca8c7644f466ce0b48 (diff)
refactor buffers
This splits buffers.py, which contained all buffer classes, into several smaller files. issue #1226
Diffstat (limited to 'alot/buffers/bufferlist.py')
-rw-r--r--alot/buffers/bufferlist.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/alot/buffers/bufferlist.py b/alot/buffers/bufferlist.py
new file mode 100644
index 00000000..db6395de
--- /dev/null
+++ b/alot/buffers/bufferlist.py
@@ -0,0 +1,66 @@
+# Copyright (C) 2011-2018 Patrick Totzke <patricktotzke@gmail.com>
+# This file is released under the GNU GPL, version 3 or a later revision.
+# For further details see the COPYING file
+from __future__ import absolute_import
+import urwid
+
+from .buffer import Buffer
+from ..widgets.bufferlist import BufferlineWidget
+from ..settings.const import settings
+
+
+class BufferlistBuffer(Buffer):
+ """lists all active buffers"""
+
+ modename = 'bufferlist'
+
+ def __init__(self, ui, filtfun=lambda x: x):
+ self.filtfun = filtfun
+ self.ui = ui
+ self.isinitialized = False
+ self.rebuild()
+ Buffer.__init__(self, ui, self.body)
+
+ def index_of(self, b):
+ """
+ returns the index of :class:`Buffer` `b` in the global list of active
+ buffers.
+ """
+ return self.ui.buffers.index(b)
+
+ def rebuild(self):
+ if self.isinitialized:
+ focusposition = self.bufferlist.get_focus()[1]
+ else:
+ focusposition = 0
+ self.isinitialized = True
+
+ lines = list()
+ displayedbuffers = [b for b in self.ui.buffers if self.filtfun(b)]
+ for (num, b) in enumerate(displayedbuffers):
+ line = BufferlineWidget(b)
+ if (num % 2) == 0:
+ attr = settings.get_theming_attribute('bufferlist',
+ 'line_even')
+ else:
+ attr = settings.get_theming_attribute('bufferlist', 'line_odd')
+ focus_att = settings.get_theming_attribute('bufferlist',
+ 'line_focus')
+ buf = urwid.AttrMap(line, attr, focus_att)
+ num = urwid.Text('%3d:' % self.index_of(b))
+ lines.append(urwid.Columns([('fixed', 4, num), buf]))
+ self.bufferlist = urwid.ListBox(urwid.SimpleListWalker(lines))
+ num_buffers = len(displayedbuffers)
+ if focusposition is not None and num_buffers > 0:
+ self.bufferlist.set_focus(focusposition % num_buffers)
+ self.body = self.bufferlist
+
+ def get_selected_buffer(self):
+ """returns currently selected :class:`Buffer` element from list"""
+ linewidget, _ = self.bufferlist.get_focus()
+ bufferlinewidget = linewidget.get_focus().original_widget
+ return bufferlinewidget.get_buffer()
+
+ def focus_first(self):
+ """Focus the first line in the buffer list."""
+ self.body.set_focus(0)