summaryrefslogtreecommitdiff
path: root/alot/buffers/taglist.py
diff options
context:
space:
mode:
Diffstat (limited to 'alot/buffers/taglist.py')
-rw-r--r--alot/buffers/taglist.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/alot/buffers/taglist.py b/alot/buffers/taglist.py
new file mode 100644
index 00000000..55fa2fdd
--- /dev/null
+++ b/alot/buffers/taglist.py
@@ -0,0 +1,70 @@
+# 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
+import urwid
+
+from .buffer import Buffer
+from ..settings.const import settings
+from ..widgets.globals import TagWidget
+
+
+class TagListBuffer(Buffer):
+ """lists all tagstrings present in the notmuch database"""
+
+ modename = 'taglist'
+
+ def __init__(self, ui, alltags=None, filtfun=lambda x: x):
+ self.filtfun = filtfun
+ self.ui = ui
+ self.tags = alltags or []
+ self.isinitialized = False
+ self.rebuild()
+ Buffer.__init__(self, ui, self.body)
+
+ def rebuild(self):
+ if self.isinitialized:
+ focusposition = self.taglist.get_focus()[1]
+ else:
+ focusposition = 0
+ self.isinitialized = True
+
+ lines = list()
+ displayedtags = sorted((t for t in self.tags if self.filtfun(t)),
+ key=str.lower)
+ for (num, b) in enumerate(displayedtags):
+ if (num % 2) == 0:
+ attr = settings.get_theming_attribute('taglist', 'line_even')
+ else:
+ attr = settings.get_theming_attribute('taglist', 'line_odd')
+ focus_att = settings.get_theming_attribute('taglist', 'line_focus')
+
+ tw = TagWidget(b, attr, focus_att)
+ rows = [('fixed', tw.width(), tw)]
+ if tw.hidden:
+ rows.append(urwid.Text(b + ' [hidden]'))
+ elif tw.translated is not b:
+ rows.append(urwid.Text('(%s)' % b))
+ line = urwid.Columns(rows, dividechars=1)
+ line = urwid.AttrMap(line, attr, focus_att)
+ lines.append(line)
+
+ self.taglist = urwid.ListBox(urwid.SimpleListWalker(lines))
+ self.body = self.taglist
+
+ self.taglist.set_focus(focusposition % len(displayedtags))
+
+ def focus_first(self):
+ """Focus the first line in the tag list."""
+ self.body.set_focus(0)
+
+ def focus_last(self):
+ allpos = self.taglist.body.positions(reverse=True)
+ if allpos:
+ lastpos = allpos[0]
+ self.body.set_focus(lastpos)
+
+ def get_selected_tag(self):
+ """returns selected tagstring"""
+ cols, _ = self.taglist.get_focus()
+ tagwidget = cols.original_widget.get_focus()
+ return tagwidget.tag