class DexterInterface(object): def __init__(self, filename = None, terminal = None): self.filename = filename self.data = {} self.commands = DexterCommands(self) self.prompt = DexterPrompt(self) self.init_views() self.init_terminal(terminal) def init_terminal(self, terminal = None): self.terminal = terminal or Terminal() signal.signal(signal.SIGWINCH, self.on_resize) self.redraw() def init_views(self): self.views = {} self.cur_view = 'msglog' for name, desc in INITIAL_VIEWS.items(): self.views[name] = DexterView(self, desc) def on_resize(self, *args): self.terminal.on_resize() self.redraw() def redraw(self): self.view.draw() self.prompt.draw() self.terminal.stdscr.refresh() def do_command(self, command): self.output(self.prompt.pstring + command) self.commands.do(command) self.redraw() def output(self, text, name=None): name = name or self.cur_view self.get_view(name).append(text) def repl(self): with self.terminal: while True: cmd = self.prompt.wait() self.do_command(cmd) def get_view(self, name): if not name in self.views: self.views[name] = DexterView(self) return self.views[name] @property def view(self): return self.get_view(self.cur_view)
def __init__(self, filename = None, terminal = None): self.filename = filename self.data = {} self.commands = DexterCommands(self) self.prompt = DexterPrompt(self) self.init_views() self.init_terminal(terminal)