Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e5b5b44

Browse files
committed
Fix \watch's interaction with libedit on ^C.
When you hit ^C, the terminal driver in Unix-like systems echoes "^C" as well as sending an interrupt signal (depending on stty settings). At least libedit (but maybe also libreadline) is then confused about the current cursor location, and corrupts the display if you try to scroll back. Fix, by moving to a new line before the next prompt is displayed. Back-patch to all supported released. Author: Pavel Stehule <pavel.stehule@gmail.com> Reported-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/3278793.1626198638%40sss.pgh.pa.us
1 parent 49d296d commit e5b5b44

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/bin/psql/command.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4899,6 +4899,14 @@ do_watch(PQExpBuffer query_buf, double sleep)
48994899
sigint_interrupt_enabled = false;
49004900
}
49014901

4902+
/*
4903+
* If the terminal driver echoed "^C", libedit/libreadline might be
4904+
* confused about the cursor position. Therefore, inject a newline
4905+
* before the next prompt is displayed.
4906+
*/
4907+
fprintf(stdout, "\n");
4908+
fflush(stdout);
4909+
49024910
pg_free(title);
49034911
return (res >= 0);
49044912
}

0 commit comments

Comments
 (0)