aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2022-07-10 16:30:03 +1200
committerThomas Munro <tmunro@postgresql.org>2022-07-10 16:54:09 +1200
commit09224a35cdaa06f047d2ae1e25595002f27ce303 (patch)
treee3608743737a1de88397a980ead3e63127d41a18 /src
parentf02f0b8cea5dddfa8ff5e0e26d2ece2052c4f0fe (diff)
downloadpostgresql-09224a35cdaa06f047d2ae1e25595002f27ce303.tar.gz
postgresql-09224a35cdaa06f047d2ae1e25595002f27ce303.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/command.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 7218e7798bb..8889f833714 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -4675,6 +4675,14 @@ do_watch(PQExpBuffer query_buf, double sleep)
sigint_interrupt_enabled = false;
}
+ /*
+ * If the terminal driver echoed "^C", libedit/libreadline might be
+ * confused about the cursor position. Therefore, inject a newline
+ * before the next prompt is displayed.
+ */
+ fprintf(stdout, "\n");
+ fflush(stdout);
+
pg_free(title);
return (res >= 0);
}