# HG changeset patch # User Goffi # Date 1278136604 -28800 # Node ID c94cdbfdf3e8df6ebebb3b7bd2d3437036dfd8ab # Parent 6290022ae74d43aed3e35a7361bd9c4c6ae5264f 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) diff -r 6290022ae74d -r c94cdbfdf3e8 frontends/primitivus/custom_widgets.py --- 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()