Here's the patch I promised over on HACKERS - it alters the

implementation
of '\e' history tracking for systems that have a readline compatability
library without replace_history_entry.  I fall back to pushing the query
onto the history stack after the \e, rather than replacing it.

The patch adds one more place to look for readline headers, and a test
for replace_history_entry. I've only included the patch for configure.in

Ross J. Reedstrom
This commit is contained in:
Bruce Momjian 2003-02-19 04:04:04 +00:00
parent d0f3a7e9c4
commit adc3b34b9c
4 changed files with 29 additions and 8 deletions

View File

@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
dnl $Header: /cvsroot/pgsql/configure.in,v 1.236 2003/02/14 14:05:00 momjian Exp $ dnl $Header: /cvsroot/pgsql/configure.in,v 1.237 2003/02/19 04:04:04 momjian Exp $
dnl dnl
dnl Developers, please strive to achieve this order: dnl Developers, please strive to achieve this order:
dnl dnl
@ -689,17 +689,19 @@ AC_CHECK_HEADERS(netinet/tcp.h, [], [],
if test "$with_readline" = yes; then if test "$with_readline" = yes; then
AC_CHECK_HEADERS(readline/readline.h, [], AC_CHECK_HEADERS(readline/readline.h, [],
[AC_CHECK_HEADERS(readline.h, [], [AC_CHECK_HEADERS(editline/readline.h, [],
[AC_CHECK_HEADERS(readline.h, [],
[AC_MSG_ERROR([readline header not found [AC_MSG_ERROR([readline header not found
If you have readline already installed, see config.log for details on the If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory. failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.])])]) Use --without-readline to disable readline support.])])])])
AC_CHECK_HEADERS(readline/history.h, [], AC_CHECK_HEADERS(readline/history.h, [],
[AC_CHECK_HEADERS(history.h, [], [AC_CHECK_HEADERS(editline/history.h, [],
[AC_CHECK_HEADERS(history.h, [],
[AC_MSG_ERROR([history header not found [AC_MSG_ERROR([history header not found
If you have readline already installed, see config.log for details on the If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory. failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.])])]) Use --without-readline to disable readline support.])])])])
fi fi
if test "$with_zlib" = yes; then if test "$with_zlib" = yes; then
@ -878,6 +880,7 @@ AC_CHECK_FUNCS(rint, [],
if test "$with_readline" = yes; then if test "$with_readline" = yes; then
PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER 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])
AC_CHECK_FUNCS([replace_history_entry])
fi fi

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000-2002 by PostgreSQL Global Development Group * Copyright 2000-2002 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.89 2003/02/13 04:08:16 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.90 2003/02/19 04:04:04 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "command.h" #include "command.h"
@ -1649,7 +1649,12 @@ do_edit(const char *filename_arg, PQExpBuffer query_buf)
} }
#ifdef USE_READLINE #ifdef USE_READLINE
#ifdef HAVE_REPLACE_HISTORY_ENTRY
replace_history_entry(where_history(),query_buf->data,NULL); replace_history_entry(where_history(),query_buf->data,NULL);
#else
add_history(query_buf->data);
#endif
#endif #endif
fclose(stream); fclose(stream);
} }

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/input.h,v 1.17 2002/09/04 20:31:36 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/input.h,v 1.18 2003/02/19 04:04:04 momjian Exp $
*/ */
#ifndef INPUT_H #ifndef INPUT_H
#define INPUT_H #define INPUT_H
@ -18,11 +18,15 @@
#define USE_READLINE 1 #define USE_READLINE 1
#if defined(HAVE_READLINE_READLINE_H) #if defined(HAVE_READLINE_READLINE_H)
#include <readline/readline.h> #include <readline/readline.h>
#elif defined(HAVE_EDITLINE_READLINE_H)
#include <editline/readline.h>
#elif defined(HAVE_READLINE_H) #elif defined(HAVE_READLINE_H)
#include <readline.h> #include <readline.h>
#endif #endif
#if defined(HAVE_READLINE_HISTORY_H) #if defined(HAVE_READLINE_HISTORY_H)
#include <readline/history.h> #include <readline/history.h>
#elif defined(HAVE_EDITLINE_HISTORY_H)
#include <editline/history.h>
#elif defined(HAVE_HISTORY_H) #elif defined(HAVE_HISTORY_H)
#include <history.h> #include <history.h>
#endif #endif

View File

@ -8,7 +8,7 @@
* or in pg_config.h afterwards. Of course, if you edit pg_config.h, then your * or in pg_config.h afterwards. Of course, if you edit pg_config.h, then your
* changes will be overwritten the next time you run configure. * changes will be overwritten the next time you run configure.
* *
* $Id: pg_config.h.in,v 1.39 2003/02/14 14:05:00 momjian Exp $ * $Id: pg_config.h.in,v 1.40 2003/02/19 04:04:04 momjian Exp $
*/ */
#ifndef PG_CONFIG_H #ifndef PG_CONFIG_H
@ -356,6 +356,12 @@
/* Set to 1 if you have <readline/readline.h> */ /* Set to 1 if you have <readline/readline.h> */
#undef HAVE_READLINE_READLINE_H #undef HAVE_READLINE_READLINE_H
/* Set to 1 if you have <editline/history.h> */
#undef HAVE_EDITLINE_HISTORY_H
/* Set to 1 if you have <editline/readline.h> */
#undef HAVE_EDITLINE_READLINE_H
/* Set to 1 if you have <security/pam_appl.h> */ /* Set to 1 if you have <security/pam_appl.h> */
#undef HAVE_SECURITY_PAM_APPL_H #undef HAVE_SECURITY_PAM_APPL_H
@ -553,6 +559,9 @@
/* Set to 1 if you have rl_filename_completion_function */ /* Set to 1 if you have rl_filename_completion_function */
#undef HAVE_RL_FILENAME_COMPLETION_FUNCTION #undef HAVE_RL_FILENAME_COMPLETION_FUNCTION
/* Set to 1 if you have replace_history_entry */
#undef HAVE_REPLACE_HISTORY_ENTRY
/* Set to 1 if you have getopt_long() (GNU long options) */ /* Set to 1 if you have getopt_long() (GNU long options) */
#undef HAVE_GETOPT_LONG #undef HAVE_GETOPT_LONG