commit ec436c57401218a9680edbae4e1e043f3c977b30 Author: Damian Johnson atagar@torproject.org Date: Tue Aug 23 10:07:27 2011 -0700
Adding text input validator for command backlogs
This allows the up and down arrow keys to scroll through a backlog of commands (it'll be used in the interpretor panel). --- src/util/textInput.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 49 insertions(+), 0 deletions(-)
diff --git a/src/util/textInput.py b/src/util/textInput.py index 9422f81..c3c229f 100644 --- a/src/util/textInput.py +++ b/src/util/textInput.py @@ -99,3 +99,52 @@ class BasicValidator(TextInputValidator):
return PASS
+class HistoryValidator(TextInputValidator): + """ + This intercepts the up and down arrow keys to scroll through a backlog of + previous commands. + """ + + def __init__(self, commandBacklog = [], nextValidator = None): + TextInputValidator.__init__(self, nextValidator) + + # contents that can be scrolled back through, newest to oldest + self.commandBacklog = commandBacklog + + # selected item from the backlog, -1 if we're not on a backlog item + self.selectionIndex = -1 + + # the fields input prior to selecting a backlog item + self.customInput = "" + + def handleKey(self, key, textbox): + if key in (curses.KEY_UP, curses.KEY_DOWN): + offset = 1 if key == curses.KEY_UP else -1 + newSelection = self.selectionIndex + offset + + # constrains the new selection to valid bounds + newSelection = max(-1, newSelection) + newSelection = min(len(self.commandBacklog) - 1, newSelection) + + # skips if this is a no-op + if self.selectionIndex == newSelection: + return None + + # saves the previous input if we weren't on the backlog + if self.selectionIndex == -1: + self.customInput = textbox.gather().strip() + + if newSelection == -1: newInput = self.customInput + else: newInput = self.commandBacklog[newSelection] + + y, _ = textbox.win.getyx() + _, maxX = textbox.win.getmaxyx() + textbox.win.clear() + textbox.win.addstr(y, 0, newInput[:maxX - 1]) + textbox.win.move(y, min(len(newInput), maxX - 1)) + + self.selectionIndex = newSelection + return None + + return PASS +
tor-commits@lists.torproject.org