psql: customizable readline history filename - Mailing list pgsql-patches
| From | Andreas Seltenreich |
|---|---|
| Subject | psql: customizable readline history filename |
| Date | |
| Msg-id | 87k6tegfcm.fsf@gate450.dyndns.org Whole thread Raw |
| Responses |
Re: psql: customizable readline history filename
Re: psql: customizable readline history filename |
| List | pgsql-patches |
Hi,
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
regards,
Andreas
Index: doc/src/sgml/ref/psql-ref.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v
retrieving revision 1.123
diff -c -r1.123 psql-ref.sgml
*** doc/src/sgml/ref/psql-ref.sgml 6 Oct 2004 18:39:15 -0000 1.123
--- doc/src/sgml/ref/psql-ref.sgml 26 Oct 2004 05:57:57 -0000
***************
*** 1973,1978 ****
--- 1973,2001 ----
</varlistentry>
<varlistentry>
+ <term><varname>HISTFILE</varname></term>
+ <listitem>
+ <para>
+ This variable contains the filename used to save the history.
+ Its default value is <filename>~/.psql_history</filename>.
+ When unset or empty, the command history is not saved upon
+ program termination. For example,
+ <programlisting>
+ \set HISTFILE ~/.psql_history- :DBNAME
+ </programlisting>
+ in your <filename>~/.psqlrc</filename> will get psql to
+ maintain a separate history for each database.
+ </para>
+ <note>
+ <para>
+ This feature was shamelessly plagiarized from
+ <application>Bash</application>.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>HISTSIZE</varname></term>
<listitem>
<para>
Index: src/bin/psql/input.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/input.c,v
retrieving revision 1.41
diff -c -r1.41 input.c
*** src/bin/psql/input.c 12 Oct 2004 21:54:44 -0000 1.41
--- src/bin/psql/input.c 26 Oct 2004 05:57:57 -0000
***************
*** 38,46 ****
static void finishInput(int, void *);
#endif
- #define PSQLHISTORY ".psql_history"
-
-
#ifdef USE_READLINE
static enum histcontrol
GetHistControlConfig(void)
--- 38,43 ----
***************
*** 167,173 ****
#ifdef USE_READLINE
if (flags & 1)
{
! char home[MAXPGPATH];
useReadline = true;
initialize_readline();
--- 164,171 ----
#ifdef USE_READLINE
if (flags & 1)
{
! const char *psql_history;
! char *tilde_expanded;
useReadline = true;
initialize_readline();
***************
*** 176,191 ****
if (GetVariable(pset.vars, "HISTSIZE") == NULL)
SetVariable(pset.vars, "HISTSIZE", "500");
using_history();
- if (get_home_path(home))
- {
- char *psql_history;
! psql_history = pg_malloc(strlen(home) + 1 +
! strlen(PSQLHISTORY) + 1);
! sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
! read_history(psql_history);
! free(psql_history);
! }
}
#endif
--- 174,189 ----
if (GetVariable(pset.vars, "HISTSIZE") == NULL)
SetVariable(pset.vars, "HISTSIZE", "500");
using_history();
! if (GetVariable(pset.vars, "HISTFILE") == NULL)
! SetVariable(pset.vars, "HISTFILE", "~/.psql_history");
!
! psql_history = GetVariable(pset.vars, "HISTFILE");
!
! tilde_expanded = pg_strdup(psql_history);
! expand_tilde(&tilde_expanded);
! read_history(tilde_expanded);
! free(tilde_expanded);
}
#endif
***************
*** 228,252 ****
#ifdef USE_READLINE
if (useHistory)
{
! char home[MAXPGPATH];
!
! if (get_home_path(home))
! {
! char *psql_history;
! int hist_size;
! psql_history = pg_malloc(strlen(home) + 1 +
! strlen(PSQLHISTORY) + 1);
! hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
! if (hist_size >= 0)
! stifle_history(hist_size);
!
! sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
! write_history(psql_history);
! free(psql_history);
! }
}
#endif
}
--- 226,251 ----
#ifdef USE_READLINE
if (useHistory)
{
! const char *psql_history;
! char *tilde_expanded;
! int hist_size;
!
! psql_history = GetVariable(pset.vars, "HISTFILE");
!
! if (!psql_history || !strlen(psql_history))
! return;
!
! tilde_expanded = pg_strdup(psql_history);
! expand_tilde(&tilde_expanded);
!
! hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
! if (hist_size >= 0)
! stifle_history(hist_size);
! saveHistory(tilde_expanded);
! free(tilde_expanded);
}
#endif
}
pgsql-patches by date: