Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

don't ignore ctrl-C during `%gui qt` #1160

Merged
merged 2 commits into from

3 participants

@minrk
Owner

See #1157

PR #815 ignores ctrl-C during normal code execution, this restores the sigint handler outside the inputhook.

@fperez fperez merged commit 464cb89 into master
@fperez
Owner

@cboos, just wanted to ping you on this one: we merged it after review on IRC and a fair amount of testing. We realize it may bring back some problem case you might know about and that we couldn't find, so please let us know if that's the case. But the complete breakage of C-C in master was bad enough that we had to do something to fix it; we're happy to fine-tune further if you know of other edge cases this causes problems with.

@cboos

Thanks for the CC. The changes look good and a0e0692 was indeed a mistake from my part, the correct behavior should indeed be that CTRL+C is allowed outside of the inputhook (I probably did this silly mistake in an "afterthought", wanting to make it symmetric with the ignore_CTRL_C in the catch block, forgetting that the mgr.clear_inputhook() done just a bit later would reenable the CTRL_C). Your finally clause makes the intent clearer.

@cboos

That mgr.clear_inputhook() will re-enable the CTRL+C, so any KeyboardInterrupt received in the few lines until the function exit may risk to result in an other internal error, so it's probably best to move that call till after print("Got exception...").

Owner

Good catch, thanks! Fixed in 699fdb4.

@fperez fperez referenced this pull request from a commit
Commit has since been removed from the repository and is no longer available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 4 additions and 6 deletions.
  1. +4 −6 IPython/lib/inputhookqt4.py
View
10 IPython/lib/inputhookqt4.py
@@ -91,21 +91,19 @@ def inputhook_qt4():
timer.start(50)
app.exec_()
timer.stop()
- ignore_CTRL_C()
except KeyboardInterrupt:
ignore_CTRL_C()
got_kbdint[0] = True
- print("\nKeyboardInterrupt - qt4 event loop interrupted!"
- "\n * hit CTRL+C again to clear the prompt"
- "\n * use '%gui none' to disable the event loop"
- " permanently"
- "\n and '%gui qt4' to re-enable it later")
+ print("\nKeyboardInterrupt - Ctrl-C again for new prompt")
mgr.clear_inputhook()
except: # NO exceptions are allowed to escape from a ctypes callback
+ ignore_CTRL_C()
mgr.clear_inputhook()
from traceback import print_exc
print_exc()
print("Got exception from inputhook_qt4, unregistering.")
+ finally:
+ allow_CTRL_C()
return 0
def preprompthook_qt4(ishell):
Something went wrong with that request. Please try again.