Commit ab7fef0a authored by Thomas Munro's avatar Thomas Munro

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: default avatarTom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/3278793.1626198638%40sss.pgh.pa.us
parent f1c779e2
...@@ -4992,6 +4992,14 @@ do_watch(PQExpBuffer query_buf, double sleep) ...@@ -4992,6 +4992,14 @@ do_watch(PQExpBuffer query_buf, double sleep)
sigint_interrupt_enabled = false; 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); pg_free(title);
return (res >= 0); return (res >= 0);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment