Re: psql: customizable readline history filename

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Andreas Seltenreich <seltenreich(at)gmx(dot)de>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: psql: customizable readline history filename
Date: 2004-11-27 04:23:19
Message-ID: 200411270423.iAR4NJY29426@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


This has been saved for the 8.1 release:

http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Andreas Seltenreich wrote:
> 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
> }

>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2004-11-27 05:03:01 Re: [BUGS] solaris non gcc compiler debug options
Previous Message Tom Lane 2004-11-27 00:01:35 Re: Improvement to pg_trgm readme