crecord: fix issue when backgrounding editor would leave artefact
authorLaurent Charignon <l.charignon@gmail.com>
Wed, 15 Jul 2015 20:39:23 -0700
changeset 25807 2cccaf937a7a
parent 25806 5e18f6e39006
child 25808 425839c8ec79
crecord: fix issue when backgrounding editor would leave artefact Before this patch: - if a user was entering a commit message after having ran the curses interface - and then uses ctrl-z, followed by fg to put the editor in the background/foreground - then the curses interface would leave artefact on the screen of the editor, making entering the commit message a difficult task This happened because ncurses registers a signal handler for SIGTSTP and does not restore the original signal handler after running. More info at: http://stackoverflow.com/questions/31440392/ curses-wrapper-messing-up-terminal-after-background-foreground-sequence/ 31441709#31441709 This patch restores the original value of the signal handler after running the curses interface and therefore fixes this issue. It don't know how to add a test for this issue, I tested the scenario above manually and it works correctly with the patch.
mercurial/crecord.py
--- a/mercurial/crecord.py	Fri Jul 17 00:22:16 2015 +0900
+++ b/mercurial/crecord.py	Wed Jul 15 20:39:23 2015 -0700
@@ -482,7 +482,10 @@
     """
     ui.write(_('starting interactive selection\n'))
     chunkselector = curseschunkselector(headerlist, ui)
+    f = signal.getsignal(signal.SIGTSTP)
     curses.wrapper(chunkselector.main)
+    # ncurses does not restore signal handler for SIGTSTP
+    signal.signal(signal.SIGTSTP, f)
 
 def testdecorator(testfn, f):
     def u(*args, **kwargs):