diff --git a/configure b/configure index 1f6d7933f9..0b6c5752b7 100755 --- a/configure +++ b/configure @@ -23217,7 +23217,8 @@ _ACEOF fi -for ac_func in rl_completion_matches rl_filename_completion_function + +for ac_func in rl_completion_matches rl_filename_completion_function rl_reset_screen_size do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/configure.in b/configure.in index 9671a8d214..43a10512b3 100644 --- a/configure.in +++ b/configure.in @@ -1508,7 +1508,7 @@ LIBS="$LIBS_including_readline" if test "$with_readline" = yes; then PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER - AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function]) + AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function rl_reset_screen_size]) AC_CHECK_FUNCS([append_history history_truncate_file]) fi diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c index f08ed83d68..1e5bba908a 100644 --- a/src/bin/psql/input.c +++ b/src/bin/psql/input.c @@ -65,6 +65,17 @@ gets_interactive(const char *prompt) { char *result; + /* + * Some versions of readline don't notice SIGWINCH signals that arrive + * when not actively reading input. The simplest fix is to always + * re-read the terminal size. This leaves a window for SIGWINCH to be + * missed between here and where readline() enables libreadline's + * signal handler, but that's probably short enough to be ignored. + */ +#ifdef HAVE_RL_RESET_SCREEN_SIZE + rl_reset_screen_size(); +#endif + /* Enable SIGINT to longjmp to sigint_interrupt_jmp */ sigint_interrupt_enabled = true; @@ -330,6 +341,7 @@ initializeInput(int flags) char home[MAXPGPATH]; useReadline = true; + rl_initialize(); initialize_readline(); useHistory = true; diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index b6a6a48807..1c49fcb122 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -421,6 +421,9 @@ /* Define to 1 if you have the `rl_filename_completion_function' function. */ #undef HAVE_RL_FILENAME_COMPLETION_FUNCTION +/* Define to 1 if you have the `rl_reset_screen_size' function. */ +#undef HAVE_RL_RESET_SCREEN_SIZE + /* Define to 1 if you have the header file. */ #undef HAVE_SECURITY_PAM_APPL_H