This is an automated email from the ASF dual-hosted git repository.

maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 56648eb9b46199517870c51887246fdfd31a3cd6
Author: Thomas Munro <[email protected]>
AuthorDate: Sun Jul 10 16:30:03 2022 +1200

    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 <[email protected]>
    Reported-by: Tom Lane <[email protected]>
    Discussion: https://postgr.es/m/3278793.1626198638%40sss.pgh.pa.us
---
 src/bin/psql/command.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 73ac9b4265..cd2820f73c 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -4993,6 +4993,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);
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to