mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
Merge pull request #6213 from nyalldawson/interrupt_console
[console] Allow breaking execution of scripts via Ctrl-C
This commit is contained in:
commit
ad21d371b8
@ -39,6 +39,7 @@ class writeOut(object):
|
|||||||
self.sO = shellOut
|
self.sO = shellOut
|
||||||
self.out = None
|
self.out = None
|
||||||
self.style = style
|
self.style = style
|
||||||
|
self.fire_keyboard_interrupt = False
|
||||||
|
|
||||||
def write(self, m):
|
def write(self, m):
|
||||||
if self.style == "_traceback":
|
if self.style == "_traceback":
|
||||||
@ -62,6 +63,10 @@ class writeOut(object):
|
|||||||
if self.style != "_traceback":
|
if self.style != "_traceback":
|
||||||
QCoreApplication.processEvents()
|
QCoreApplication.processEvents()
|
||||||
|
|
||||||
|
if self.fire_keyboard_interrupt:
|
||||||
|
self.fire_keyboard_interrupt = False
|
||||||
|
raise KeyboardInterrupt
|
||||||
|
|
||||||
def move_cursor_to_end(self):
|
def move_cursor_to_end(self):
|
||||||
"""Move cursor to end of text"""
|
"""Move cursor to end of text"""
|
||||||
line, index = self.get_end_pos()
|
line, index = self.get_end_pos()
|
||||||
|
@ -378,9 +378,16 @@ class ShellScintilla(QsciScintilla, code.InteractiveInterpreter):
|
|||||||
if not self.is_cursor_on_edition_zone() or startLine < endLine:
|
if not self.is_cursor_on_edition_zone() or startLine < endLine:
|
||||||
# allow copying and selecting
|
# allow copying and selecting
|
||||||
if e.modifiers() & (Qt.ControlModifier | Qt.MetaModifier):
|
if e.modifiers() & (Qt.ControlModifier | Qt.MetaModifier):
|
||||||
if e.key() in (Qt.Key_C, Qt.Key_A):
|
if e.key() == Qt.Key_C:
|
||||||
|
# only catch and return from Ctrl-C here if there's a selection
|
||||||
|
if self.hasSelectedText():
|
||||||
|
QsciScintilla.keyPressEvent(self, e)
|
||||||
|
return
|
||||||
|
elif e.key() == Qt.Key_A:
|
||||||
QsciScintilla.keyPressEvent(self, e)
|
QsciScintilla.keyPressEvent(self, e)
|
||||||
return
|
return
|
||||||
|
else:
|
||||||
|
return
|
||||||
# allow selection
|
# allow selection
|
||||||
if e.modifiers() & Qt.ShiftModifier:
|
if e.modifiers() & Qt.ShiftModifier:
|
||||||
if e.key() in (Qt.Key_Left, Qt.Key_Right, Qt.Key_Home, Qt.Key_End):
|
if e.key() in (Qt.Key_Left, Qt.Key_Right, Qt.Key_Home, Qt.Key_End):
|
||||||
@ -389,6 +396,11 @@ class ShellScintilla(QsciScintilla, code.InteractiveInterpreter):
|
|||||||
# all other keystrokes get sent to the input line
|
# all other keystrokes get sent to the input line
|
||||||
self.move_cursor_to_end()
|
self.move_cursor_to_end()
|
||||||
|
|
||||||
|
if e.modifiers() & (Qt.ControlModifier | Qt.MetaModifier) and e.key() == Qt.Key_C and not self.hasSelectedText():
|
||||||
|
# keyboard interrupt
|
||||||
|
sys.stdout.fire_keyboard_interrupt = True
|
||||||
|
return
|
||||||
|
|
||||||
line, index = self.getCursorPosition()
|
line, index = self.getCursorPosition()
|
||||||
cmd = self.text(line)
|
cmd = self.text(line)
|
||||||
|
|
||||||
@ -602,12 +614,14 @@ class ShellScintilla(QsciScintilla, code.InteractiveInterpreter):
|
|||||||
sys.stderr.write(txt)
|
sys.stderr.write(txt)
|
||||||
|
|
||||||
def writeCMD(self, txt):
|
def writeCMD(self, txt):
|
||||||
|
sys.stdout.fire_keyboard_interrupt = False
|
||||||
if len(txt) > 0:
|
if len(txt) > 0:
|
||||||
getCmdString = self.text()
|
getCmdString = self.text()
|
||||||
prompt = getCmdString[0:4]
|
prompt = getCmdString[0:4]
|
||||||
sys.stdout.write(prompt + txt + '\n')
|
sys.stdout.write(prompt + txt + '\n')
|
||||||
|
|
||||||
def runsource(self, source, filename='<input>', symbol='single'):
|
def runsource(self, source, filename='<input>', symbol='single'):
|
||||||
|
sys.stdout.fire_keyboard_interrupt = False
|
||||||
hook = sys.excepthook
|
hook = sys.excepthook
|
||||||
try:
|
try:
|
||||||
def excepthook(etype, value, tb):
|
def excepthook(etype, value, tb):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user