Mercurial > urwid-satext
diff frontends/primitivus/custom_widgets.py @ 4:c94cdbfdf3e8
primitivus: added edition zone at the bottom
- primitivus: new AdvancedEdit widget, which is like Edit but manage some new keys (C-a, C-e, C-k, C-w)
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 03 Jul 2010 13:56:44 +0800 |
parents | 6290022ae74d |
children | 592cd64933dd |
line wrap: on
line diff
--- a/frontends/primitivus/custom_widgets.py Sat Jul 03 12:01:01 2010 +0800 +++ b/frontends/primitivus/custom_widgets.py Sat Jul 03 13:56:44 2010 +0800 @@ -36,6 +36,26 @@ def get_edit_text(self): return self.__real_text +class AdvancedEdit(urwid.Edit): + """Edit box with some custom improvments""" + + def keypress(self, size, key): + #TODO: insert mode is not managed yet + if key == 'ctrl a': + key = 'home' + elif key == 'ctrl e': + key = 'end' + elif key == 'ctrl k': + self._delete_highlighted() + self.set_edit_text(self.edit_text[:self.edit_pos]) + elif key == 'ctrl w': + before = self.edit_text[:self.edit_pos] + pos = before.rstrip().rfind(" ")+1 + self.set_edit_text(before[:pos] + self.edit_text[self.edit_pos:]) + self.set_edit_pos(pos) + return super(AdvancedEdit, self).keypress(size, key) + + class SelectableText(urwid.FlowWidget): signals = ['change'] @@ -93,6 +113,7 @@ self.content = urwid.SimpleListWalker([]) self.list_box = urwid.ListBox(self.content) + urwid.WidgetWrap.__init__(self, self.list_box) self.changeValues(options) def __onStateChange(self, widget, selected): @@ -141,7 +162,7 @@ if self.single and new_values: self.content[0].setState(True) display_widget = urwid.BoxAdapter(self.list_box, min(len(new_values),5) or 1) - urwid.WidgetWrap.__init__(self, display_widget) + self._set_w(display_widget) def selectValue(self, value): self.unselectAll()