aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2005-06-10 15:34:26 +0000
committerBruce Momjian <bruce@momjian.us>2005-06-10 15:34:26 +0000
commitea88824a3e2d2a610ceff43740391b2269939f77 (patch)
tree23ae0fa564d91616b87b68dd706d55fadcadc2ff /src
parent92eadf6c4a5cc762e3829b360d4ac4d51cae03fb (diff)
downloadpostgresql-ea88824a3e2d2a610ceff43740391b2269939f77.tar.gz
postgresql-ea88824a3e2d2a610ceff43740391b2269939f77.zip
the following patch makes the filename used to store the readline
history customizable through a variable named HISTFILE, analogous to psql's already implemented HISTCONTROL and HISTSIZE variables, and bash's HISTFILE-Variable. The motivation was to be able to get psql to maintain separate histories for separate databases. This is now easily achievable through a line like the following in ~/.psqlrc: \set HISTFILE ~/.psql_history-:DBNAME Andreas Seltenreich
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/input.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c
index e75c86f7f8c..ee0180376b1 100644
--- a/src/bin/psql/input.c
+++ b/src/bin/psql/input.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.43 2005/01/06 18:29:09 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.44 2005/06/10 15:34:26 momjian Exp $
*/
#include "postgres_fe.h"
@@ -24,6 +24,8 @@
#ifdef USE_READLINE
static bool useReadline;
static bool useHistory;
+char *psql_history;
+
enum histcontrol
{
@@ -177,16 +179,24 @@ initializeInput(int flags)
if (GetVariable(pset.vars, "HISTSIZE") == NULL)
SetVariable(pset.vars, "HISTSIZE", "500");
using_history();
- if (get_home_path(home))
+
+ if (GetVariable(pset.vars, "HISTFILE") == NULL)
+ {
+ if (get_home_path(home))
+ {
+ psql_history = pg_malloc(strlen(home) + 1 +
+ strlen(PSQLHISTORY) + 1);
+ snprintf(psql_history, MAXPGPATH, "%s/%s", home, PSQLHISTORY);
+ }
+ }
+ else
{
- char *psql_history;
+ psql_history = pg_strdup(GetVariable(pset.vars, "HISTFILE"));
+ expand_tilde(&psql_history);
+ }
- psql_history = pg_malloc(strlen(home) + 1 +
- strlen(PSQLHISTORY) + 1);
- sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
+ if (psql_history)
read_history(psql_history);
- free(psql_history);
- }
}
#endif
@@ -227,25 +237,17 @@ finishInput(int exitstatus, void *arg)
#endif
{
#ifdef USE_READLINE
- if (useHistory)
+ if (useHistory && psql_history)
{
- char home[MAXPGPATH];
+ int hist_size;
- if (get_home_path(home))
- {
- char *psql_history;
- int hist_size;
-
- hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
- if (hist_size >= 0)
- stifle_history(hist_size);
-
- psql_history = pg_malloc(strlen(home) + 1 +
- strlen(PSQLHISTORY) + 1);
- sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
- write_history(psql_history);
- free(psql_history);
- }
+ hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
+ if (hist_size >= 0)
+ stifle_history(hist_size);
+
+ write_history(psql_history);
+ free(psql_history);
+ psql_history = NULL;
}
#endif
}