From 2d11b6e7d72cac3425827a72369dbc3b178e5d45 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Wed, 25 Apr 2012 10:12:17 +0900 Subject: [PATCH] allow statements in debug console --- aqt/main.py | 63 +++++++++++++++++++++++++++++++++++------------ designer/debug.ui | 38 +++++++++++++++++++--------- 2 files changed, 73 insertions(+), 28 deletions(-) diff --git a/aqt/main.py b/aqt/main.py index 6882489f3..1a1d2a241 100644 --- a/aqt/main.py +++ b/aqt/main.py @@ -885,26 +885,57 @@ will be lost. Continue?""")) d = self.debugDiag = QDialog() frm = aqt.forms.debug.Ui_Dialog() frm.setupUi(d) - d.connect(frm.line, SIGNAL("returnPressed()"), lambda: self.onDebugRet(frm)) - d.show() + s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+return"), d) + self.connect(s, SIGNAL("activated()"), + lambda: self.onDebugRet(frm)) + s = self.debugDiagShort = QShortcut( + QKeySequence("ctrl+shift+return"), d) + self.connect(s, SIGNAL("activated()"), + lambda: self.onDebugPrint(frm)) + d.exec_() + + def _captureOutput(self, on): + mw = self + class Stream(object): + def write(self, data): + mw._output += data + if on: + self._output = "" + self._oldStderr = sys.stderr + self._oldStdout = sys.stdout + s = Stream() + sys.stderr = s + sys.stdout = s + else: + sys.stderr = self._oldStderr + sys.stdout = self._oldStdout + + def _debugCard(self): + return self.reviewer.card.__dict__ + + def onDebugPrint(self, frm): + frm.text.setPlainText("pp(%s)" % frm.text.toPlainText()) + self.onDebugRet(frm) def onDebugRet(self, frm): import pprint, traceback - line = frm.line.text() - if not line: - return - def card(): - return self.reviewer.card.__dict__ - locals = dict(mw=self, card=card) - newline = "\n" + text = frm.text.toPlainText() + card = self._debugCard + mw = self + pp = pprint.pprint + self._captureOutput(True) try: - ret = eval(line, globals(), locals) - except Exception, e: - newline = "" - ret = traceback.format_exc() - if not isinstance(ret, basestring): - ret = pprint.pformat(ret) - frm.log.appendPlainText(">>> %s\n%s%s" % (line, ret, newline)) + exec text + except: + self._output += traceback.format_exc() + self._captureOutput(False) + buf = "" + for c, line in enumerate(text.strip().split("\n")): + if c == 0: + buf += ">>> %s\n" % line + else: + buf += "... %s\n" % line + frm.log.appendPlainText(buf + (self._output or "")) frm.log.ensureCursorVisible() # System specific code diff --git a/designer/debug.ui b/designer/debug.ui index 200d0485a..505b1bde4 100644 --- a/designer/debug.ui +++ b/designer/debug.ui @@ -15,21 +15,35 @@ - - - - - Expression: - - - - - - - + + + + 0 + 1 + + + + + 16777215 + 100 + + + + + + 0 + 8 + + + + + Courier + 14 + + Qt::ClickFocus