##// END OF EJS Templates
Backport PR #10489: Prefer execution when there's only a single line entered...
Backport PR #10489: Prefer execution when there's only a single line entered Closes gh-10425 The heuristic here is to treat a single line specially, and always evaluate it as if the cursor was at the end. An alternative heuristic could be to do this if the cursor is on the last line of the input. This could also cause some weird effects if you e.g. type `for a in range(5):`, move the cursor back a few places and press enter - you'll get a newline inserted in the text, but it will indent as if it were after the colon. I'm still trying to think if there's a better way to approach it.

File last commit:

r23382:5176e375 auto-backport-of-...
r23583:13833706
Show More
qt.py
35 lines | 1.3 KiB | text/x-python | PythonLexer
Thomas Kluyver
Try to fix Qt event loop, take III...
r22654 import sys
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 from IPython.external.qt_for_kernel import QtCore, QtGui
Thomas Kluyver
Create a QApplication for inputhook if one doesn't already exist...
r22707 # If we create a QApplication, keep a reference to it so that it doesn't get
# garbage collected.
_appref = None
Matthias Bussonnier
Backport PR #10301: FIX: re-order qt eventloop hook a bit...
r23382
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 def inputhook(context):
Thomas Kluyver
Create a QApplication for inputhook if one doesn't already exist...
r22707 global _appref
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 app = QtCore.QCoreApplication.instance()
if not app:
Thomas Kluyver
Create a QApplication for inputhook if one doesn't already exist...
r22707 _appref = app = QtGui.QApplication([" "])
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 event_loop = QtCore.QEventLoop(app)
Thomas Kluyver
Try to fix Qt event loop, take III...
r22654
if sys.platform == 'win32':
# The QSocketNotifier method doesn't appear to work on Windows.
# Use polling instead.
timer = QtCore.QTimer()
timer.timeout.connect(event_loop.quit)
while not context.input_is_ready():
timer.start(50) # 50 ms
event_loop.exec_()
timer.stop()
else:
# On POSIX platforms, we can use a file descriptor to quit the event
# loop when there is input ready to read.
Matthias Bussonnier
Backport PR #10301: FIX: re-order qt eventloop hook a bit...
r23382 notifier = QtCore.QSocketNotifier(context.fileno(),
QtCore.QSocketNotifier.Read)
# connect the callback we care about before we turn it on
Thomas Kluyver
Try to fix Qt event loop, take III...
r22654 notifier.activated.connect(event_loop.exit)
Matthias Bussonnier
Backport PR #10301: FIX: re-order qt eventloop hook a bit...
r23382 notifier.setEnabled(True)
# only start the event loop we are not already flipped
if not context.input_is_ready():
event_loop.exec_()