Mercurial > hg-stable
changeset 25807:2cccaf937a7a
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.
author | Laurent Charignon <l.charignon@gmail.com> |
---|---|
date | Wed, 15 Jul 2015 20:39:23 -0700 |
parents | 5e18f6e39006 |
children | 425839c8ec79 |
files | mercurial/crecord.py |
diffstat | 1 files changed, 3 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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):