diff options
author | Bruce Momjian <bruce@momjian.us> | 2005-06-10 15:34:26 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2005-06-10 15:34:26 +0000 |
commit | ea88824a3e2d2a610ceff43740391b2269939f77 (patch) | |
tree | 23ae0fa564d91616b87b68dd706d55fadcadc2ff /src | |
parent | 92eadf6c4a5cc762e3829b360d4ac4d51cae03fb (diff) | |
download | postgresql-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.c | 52 |
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 } |