aboutsummaryrefslogtreecommitdiff
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:53:18 +1200
commitab7fef0acfbd33331b4d3a000d501454fdcee8f2 (patch)
treef2f6f645aaed79b9df912a3ff847a8cefcb5b038
parentf1c779e2b9e48eab05ad471e4111eb17e7e6ad3a (diff)
downloadpostgresql-ab7fef0acfbd33331b4d3a000d501454fdcee8f2.tar.gz
postgresql-ab7fef0acfbd33331b4d3a000d501454fdcee8f2.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
-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 d1ee795cb60..062c79ccbd1 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -4992,6 +4992,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);
}