<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.52
     from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 19 January 2000 -->

<TITLE>GNU History Library</TITLE>
</HEAD>
<BODY>
<H1>GNU History Library</H1>
<H2>Edition 4.1, for <CODE>History Library</CODE> Version 4.1.</H2>
<H2>January 2000</H2>
<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
<P>
<P><HR><P>
<H1>Table of Contents</H1>
<UL>
<LI><A NAME="TOC1" HREF="history.html#SEC1">Using History Interactively</A>
<UL>
<LI><A NAME="TOC2" HREF="history.html#SEC2">History Expansion</A>
<UL>
<LI><A NAME="TOC3" HREF="history.html#SEC3">Event Designators</A>
<LI><A NAME="TOC4" HREF="history.html#SEC4">Word Designators</A>
<LI><A NAME="TOC5" HREF="history.html#SEC5">Modifiers</A>
</UL>
</UL>
<LI><A NAME="TOC6" HREF="history.html#SEC6">Programming with GNU History</A>
<UL>
<LI><A NAME="TOC7" HREF="history.html#SEC7">Introduction to History</A>
<LI><A NAME="TOC8" HREF="history.html#SEC8">History Storage</A>
<LI><A NAME="TOC9" HREF="history.html#SEC9">History Functions</A>
<UL>
<LI><A NAME="TOC10" HREF="history.html#SEC10">Initializing History and State Management</A>
<LI><A NAME="TOC11" HREF="history.html#SEC11">History List Management</A>
<LI><A NAME="TOC12" HREF="history.html#SEC12">Information About the History List</A>
<LI><A NAME="TOC13" HREF="history.html#SEC13">Moving Around the History List</A>
<LI><A NAME="TOC14" HREF="history.html#SEC14">Searching the History List</A>
<LI><A NAME="TOC15" HREF="history.html#SEC15">Managing the History File</A>
<LI><A NAME="TOC16" HREF="history.html#SEC16">History Expansion</A>
</UL>
<LI><A NAME="TOC17" HREF="history.html#SEC17">History Variables</A>
<LI><A NAME="TOC18" HREF="history.html#SEC18">History Programming Example</A>
</UL>
<LI><A NAME="TOC19" HREF="history.html#SEC19">Concept Index</A>
<LI><A NAME="TOC20" HREF="history.html#SEC20">Function and Variable Index</A>
</UL>
<P><HR><P>

<P>
This document describes the GNU History library, a programming tool that
provides a consistent user interface for recalling lines of previously
typed input.

</P>
<P>
Published by the Free Software Foundation <BR>
59 Temple Place, Suite 330, <BR>
Boston, MA 02111 USA

</P>
<P>
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

</P>
<P>
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

</P>
<P>
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Free Software Foundation.

</P>
<P>
Copyright (C) 1988-1999 Free Software Foundation, Inc.

</P>



<H1><A NAME="SEC1" HREF="history.html#TOC1">Using History Interactively</A></H1>

<P>
This chapter describes how to use the GNU History Library interactively,
from a user's standpoint.  It should be considered a user's guide.  For
information on using the GNU History Library in your own programs,
see section <A HREF="history.html#SEC6">Programming with GNU History</A>.

</P>

<UL>
<LI><A HREF="history.html#SEC2">History Interaction</A>: What it feels like using History as a user.
</UL>



<H2><A NAME="SEC2" HREF="history.html#TOC2">History Expansion</A></H2>
<P>
<A NAME="IDX1"></A>

</P>
<P>
The History library provides a history expansion feature that is similar
to the history expansion provided by <CODE>csh</CODE>.  This section
describes the syntax used to manipulate the history information.

</P>
<P>
History expansions introduce words from the history list into
the input stream, making it easy to repeat commands, insert the
arguments to a previous command into the current input line, or
fix errors in previous commands quickly.

</P>
<P>
History expansion takes place in two parts.  The first is to determine
which line from the history list should be used during substitution.
The second is to select portions of that line for inclusion into the
current one.  The line selected from the history is called the
<EM>event</EM>, and the portions of that line that are acted upon are
called <EM>words</EM>.  Various <EM>modifiers</EM> are available to manipulate
the selected words.  The line is broken into words in the same fashion
that Bash does, so that several words
surrounded by quotes are considered one word.
History expansions are introduced by the appearance of the
history expansion character, which is <SAMP>`!'</SAMP> by default.

</P>


<UL>
<LI><A HREF="history.html#SEC3">Event Designators</A>: How to specify which history line to use.
<LI><A HREF="history.html#SEC4">Word Designators</A>: Specifying which words are of interest.
<LI><A HREF="history.html#SEC5">Modifiers</A>: Modifying the results of substitution.
</UL>



<H3><A NAME="SEC3" HREF="history.html#TOC3">Event Designators</A></H3>
<P>
<A NAME="IDX2"></A>

</P>
<P>
An event designator is a reference to a command line entry in the
history list.
<A NAME="IDX3"></A>

</P>
<DL COMPACT>

<DT><CODE>!</CODE>
<DD>
Start a history substitution, except when followed by a space, tab,
the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>.

<DT><CODE>!<VAR>n</VAR></CODE>
<DD>
Refer to command line <VAR>n</VAR>.

<DT><CODE>!-<VAR>n</VAR></CODE>
<DD>
Refer to the command <VAR>n</VAR> lines back.

<DT><CODE>!!</CODE>
<DD>
Refer to the previous command.  This is a synonym for <SAMP>`!-1'</SAMP>.

<DT><CODE>!<VAR>string</VAR></CODE>
<DD>
Refer to the most recent command starting with <VAR>string</VAR>.

<DT><CODE>!?<VAR>string</VAR>[?]</CODE>
<DD>
Refer to the most recent command containing <VAR>string</VAR>.  The trailing
<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by
a newline.

<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE>
<DD>
Quick Substitution.  Repeat the last command, replacing <VAR>string1</VAR>
with <VAR>string2</VAR>.  Equivalent to
<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>.

<DT><CODE>!#</CODE>
<DD>
The entire command line typed so far.

</DL>



<H3><A NAME="SEC4" HREF="history.html#TOC4">Word Designators</A></H3>

<P>
Word designators are used to select desired words from the event.
A <SAMP>`:'</SAMP> separates the event specification from the word designator.  It
may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>,
<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>.  Words are numbered from the beginning
of the line, with the first word being denoted by 0 (zero).  Words are
inserted into the current line separated by single spaces.

</P>
<P>
For example,

</P>
<DL COMPACT>

<DT><CODE>!!</CODE>
<DD>
designates the preceding command.  When you type this, the preceding
command is repeated in toto.

<DT><CODE>!!:$</CODE>
<DD>
designates the last argument of the preceding command.  This may be
shortened to <CODE>!$</CODE>.

<DT><CODE>!fi:2</CODE>
<DD>
designates the second argument of the most recent command starting with
the letters <CODE>fi</CODE>.
</DL>

<P>
Here are the word designators:
 
<DL COMPACT>

<DT><CODE>0 (zero)</CODE>
<DD>
The <CODE>0</CODE>th word.  For many applications, this is the command word.

<DT><CODE><VAR>n</VAR></CODE>
<DD>
The <VAR>n</VAR>th word.

<DT><CODE>^</CODE>
<DD>
The first argument; that is, word 1.

<DT><CODE>$</CODE>
<DD>
The last argument.

<DT><CODE>%</CODE>
<DD>
The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.

<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE>
<DD>
A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.

<DT><CODE>*</CODE>
<DD>
All of the words, except the <CODE>0</CODE>th.  This is a synonym for <SAMP>`1-$'</SAMP>.
It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event;
the empty string is returned in that case.

<DT><CODE><VAR>x</VAR>*</CODE>
<DD>
Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>

<DT><CODE><VAR>x</VAR>-</CODE>
<DD>
Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.

</DL>

<P>
If a word designator is supplied without an event specification, the
previous command is used as the event.

</P>


<H3><A NAME="SEC5" HREF="history.html#TOC5">Modifiers</A></H3>

<P>
After the optional word designator, you can add a sequence of one or more
of the following modifiers, each preceded by a <SAMP>`:'</SAMP>.

</P>
<DL COMPACT>

<DT><CODE>h</CODE>
<DD>
Remove a trailing pathname component, leaving only the head.

<DT><CODE>t</CODE>
<DD>
Remove all leading  pathname  components, leaving the tail.

<DT><CODE>r</CODE>
<DD>
Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
the basename.

<DT><CODE>e</CODE>
<DD>
Remove all but the trailing suffix.

<DT><CODE>p</CODE>
<DD>
Print the new command but do not execute it.

<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>
<DD>
Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
event line.  Any delimiter may be used in place of <SAMP>`/'</SAMP>.
The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR>
with a single backslash.  If <SAMP>`&#38;'</SAMP> appears in <VAR>new</VAR>,
it is replaced by <VAR>old</VAR>.  A single backslash will quote
the <SAMP>`&#38;'</SAMP>.  The final delimiter is optional if it is the last
character on the input line.

<DT><CODE>&#38;</CODE>
<DD>
Repeat the previous substitution.

<DT><CODE>g</CODE>
<DD>
Cause changes to be applied over the entire event line.  Used in
conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>,
or with <SAMP>`&#38;'</SAMP>.

</DL>



<H1><A NAME="SEC6" HREF="history.html#TOC6">Programming with GNU History</A></H1>

<P>
This chapter describes how to interface programs that you write
with the GNU History Library.
It should be considered a technical guide.
For information on the interactive use of GNU History, see section <A HREF="history.html#SEC1">Using History Interactively</A>.

</P>

<UL>
<LI><A HREF="history.html#SEC7">Introduction to History</A>: What is the GNU History library for?
<LI><A HREF="history.html#SEC8">History Storage</A>: How information is stored.
<LI><A HREF="history.html#SEC9">History Functions</A>: Functions that you can use.
<LI><A HREF="history.html#SEC17">History Variables</A>: Variables that control behaviour.
<LI><A HREF="history.html#SEC18">History Programming Example</A>: Example of using the GNU History Library.
</UL>



<H2><A NAME="SEC7" HREF="history.html#TOC7">Introduction to History</A></H2>

<P>
Many programs read input from the user a line at a time.  The GNU History
library is able to keep track of those lines, associate arbitrary data with
each line, and utilize information from previous lines in composing new
ones.

</P>
<P>
The programmer using the History library has available functions
for remembering lines on a history list, associating arbitrary data
with a line, removing lines from the list, searching through the list
for a line containing an arbitrary text string, and referencing any line
in the list directly.  In addition, a history <EM>expansion</EM> function
is available which provides for a consistent user interface across
different programs.

</P>
<P>
The user using programs written with the History library has the
benefit of a consistent user interface with a set of well-known
commands for manipulating the text of previous lines and using that text
in new commands.  The basic history manipulation commands are similar to
the history substitution provided by <CODE>csh</CODE>.

</P>
<P>
If the programmer desires, he can use the Readline library, which
includes some history manipulation by default, and has the added
advantage of command line editing.

</P>
<P>
Before declaring any functions using any functionality the History
library provides in other code, an application writer should include
the file <CODE>&#60;readline/history.h&#62;</CODE> in any file that uses the
History library's features.  It supplies extern declarations for all
of the library's public functions and variables, and declares all of
the public data structures.

</P>


<H2><A NAME="SEC8" HREF="history.html#TOC8">History Storage</A></H2>

<P>
The history list is an array of history entries.  A history entry is
declared as follows:

</P>

<PRE>
typedef struct _hist_entry {
  char *line;
  char *data;
} HIST_ENTRY;
</PRE>

<P>
The history list itself might therefore be declared as

</P>

<PRE>
HIST_ENTRY **the_history_list;
</PRE>

<P>
The state of the History library is encapsulated into a single structure:

</P>

<PRE>
/* A structure used to pass the current state of the history stuff around. */
typedef struct _hist_state {
  HIST_ENTRY **entries;         /* Pointer to the entries themselves. */
  int offset;                   /* The location pointer within this array. */
  int length;                   /* Number of elements within this array. */
  int size;                     /* Number of slots allocated to this array. */
  int flags;
} HISTORY_STATE;
</PRE>

<P>
If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been
stifled.

</P>


<H2><A NAME="SEC9" HREF="history.html#TOC9">History Functions</A></H2>

<P>
This section describes the calling sequence for the various functions
present in GNU History.

</P>

<UL>
<LI><A HREF="history.html#SEC10">Initializing History and State Management</A>: Functions to call when you
						want to use history in a
						program.
<LI><A HREF="history.html#SEC11">History List Management</A>: Functions used to manage the list
					of history entries.
<LI><A HREF="history.html#SEC12">Information About the History List</A>: Functions returning information about
					the history list.
<LI><A HREF="history.html#SEC13">Moving Around the History List</A>: Functions used to change the position
					in the history list.
<LI><A HREF="history.html#SEC14">Searching the History List</A>: Functions to search the history list
					for entries containing a string.
<LI><A HREF="history.html#SEC15">Managing the History File</A>: Functions that read and write a file
					containing the history list.
<LI><A HREF="history.html#SEC16">History Expansion</A>: Functions to perform csh-like history
					expansion.
</UL>



<H3><A NAME="SEC10" HREF="history.html#TOC10">Initializing History and State Management</A></H3>

<P>
This section describes functions used to initialize and manage
the state of the History library when you want to use the history
functions in your program.

</P>
<P>
<DL>
<DT><U>Function:</U> void <B>using_history</B> <I>()</I>
<DD><A NAME="IDX4"></A>
Begin a session in which the history functions might be used.  This
initializes the interactive variables.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>()</I>
<DD><A NAME="IDX5"></A>
Return a structure describing the current state of the input history.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I>
<DD><A NAME="IDX6"></A>
Set the state of the history list according to <VAR>state</VAR>.
</DL>

</P>


<H3><A NAME="SEC11" HREF="history.html#TOC11">History List Management</A></H3>

<P>
These functions manage individual entries on the history list, or set
parameters managing the list itself.

</P>
<P>
<DL>
<DT><U>Function:</U> void <B>add_history</B> <I>(char *string)</I>
<DD><A NAME="IDX7"></A>
Place <VAR>string</VAR> at the end of the history list.  The associated data
field (if any) is set to <CODE>NULL</CODE>.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I>
<DD><A NAME="IDX8"></A>
Remove history entry at offset <VAR>which</VAR> from the history.  The
removed element is returned so you can free the line, data,
and containing structure.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, char *line, char *data)</I>
<DD><A NAME="IDX9"></A>
Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>.
This returns the old entry so you can dispose of the data.  In the case
of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> void <B>clear_history</B> <I>()</I>
<DD><A NAME="IDX10"></A>
Clear the history list by deleting all the entries.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I>
<DD><A NAME="IDX11"></A>
Stifle the history list, remembering only the last <VAR>max</VAR> entries.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>unstifle_history</B> <I>()</I>
<DD><A NAME="IDX12"></A>
Stop stifling the history.  This returns the previous amount the
history was stifled.  The value is positive if the history was
stifled, negative if it wasn't.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_is_stifled</B> <I>()</I>
<DD><A NAME="IDX13"></A>
Returns non-zero if the history is stifled, zero if it is not.
</DL>

</P>


<H3><A NAME="SEC12" HREF="history.html#TOC12">Information About the History List</A></H3>

<P>
These functions return information about the entire history list or
individual list entries.

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>()</I>
<DD><A NAME="IDX14"></A>
Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY</CODE> which is the
current input history.  Element 0 of this list is the beginning of time.
If there is no history, return <CODE>NULL</CODE>.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>where_history</B> <I>()</I>
<DD><A NAME="IDX15"></A>
Returns the offset of the current history element.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>()</I>
<DD><A NAME="IDX16"></A>
Return the history entry at the current position, as determined by
<CODE>where_history ()</CODE>.  If there is no entry there, return a <CODE>NULL</CODE>
pointer.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I>
<DD><A NAME="IDX17"></A>
Return the history entry at position <VAR>offset</VAR>, starting from
<CODE>history_base</CODE>.  If there is no entry there, or if <VAR>offset</VAR>
is greater than the history length, return a <CODE>NULL</CODE> pointer.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_total_bytes</B> <I>()</I>
<DD><A NAME="IDX18"></A>
Return the number of bytes that the primary history entries are using.
This function returns the sum of the lengths of all the lines in the
history.
</DL>

</P>


<H3><A NAME="SEC13" HREF="history.html#TOC13">Moving Around the History List</A></H3>

<P>
These functions allow the current index into the history list to be
set or changed.

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I>
<DD><A NAME="IDX19"></A>
Set the position in the history list to <VAR>pos</VAR>, an absolute index
into the list.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>()</I>
<DD><A NAME="IDX20"></A>
Back up the current history offset to the previous history entry, and
return a pointer to that entry.  If there is no previous entry, return
a <CODE>NULL</CODE> pointer.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>()</I>
<DD><A NAME="IDX21"></A>
Move the current history offset forward to the next history entry, and
return the a pointer to that entry.  If there is no next entry, return
a <CODE>NULL</CODE> pointer.
</DL>

</P>


<H3><A NAME="SEC14" HREF="history.html#TOC14">Searching the History List</A></H3>
<P>
<A NAME="IDX22"></A>

</P>
<P>
These functions allow searching of the history list for entries containing
a specific string.  Searching may be performed both forward and backward
from the current history position.  The search may be <EM>anchored</EM>,
meaning that the string must match at the beginning of the history entry.
<A NAME="IDX23"></A>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_search</B> <I>(char *string, int direction)</I>
<DD><A NAME="IDX24"></A>
Search the history for <VAR>string</VAR>, starting at the current history
offset.  If <VAR>direction</VAR> &#60; 0, then the search is through previous entries,
else through subsequent.  If <VAR>string</VAR> is found, then
the current history index is set to that history entry, and the value
returned is the offset in the line of the entry where
<VAR>string</VAR> was found.  Otherwise, nothing is changed, and a -1 is
returned.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(char *string, int direction)</I>
<DD><A NAME="IDX25"></A>
Search the history for <VAR>string</VAR>, starting at the current history
offset.  The search is anchored: matching lines must begin with
<VAR>string</VAR>.  If <VAR>direction</VAR> &#60; 0, then the search is through previous
entries, else through subsequent.  If <VAR>string</VAR> is found, then the
current history index is set to that entry, and the return value is 0. 
Otherwise, nothing is changed, and a -1 is returned. 
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_search_pos</B> <I>(char *string, int direction, int pos)</I>
<DD><A NAME="IDX26"></A>
Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an
absolute index into the list.  If <VAR>direction</VAR> is negative, the search
proceeds backward from <VAR>pos</VAR>, otherwise forward.  Returns the absolute
index of the history element where <VAR>string</VAR> was found, or -1 otherwise.
</DL>

</P>


<H3><A NAME="SEC15" HREF="history.html#TOC15">Managing the History File</A></H3>

<P>
The History library can read the history from and write it to a file.
This section documents the functions for managing a history file.

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>read_history</B> <I>(char *filename)</I>
<DD><A NAME="IDX27"></A>
Add the contents of <VAR>filename</VAR> to the history list, a line at a
time.  If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from
<TT>`~/.history'</TT>.  Returns 0 if successful, or errno if not.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>read_history_range</B> <I>(char *filename, int from, int to)</I>
<DD><A NAME="IDX28"></A>
Read a range of lines from <VAR>filename</VAR>, adding them to the history list.
Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>.  If
<VAR>from</VAR> is zero, start at the beginning.  If <VAR>to</VAR> is less than
<VAR>from</VAR>, then read until the end of the file.  If <VAR>filename</VAR> is
<CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>.  Returns 0 if successful,
or <CODE>errno</CODE> if not.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>write_history</B> <I>(char *filename)</I>
<DD><A NAME="IDX29"></A>
Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR>
if necessary.  If <VAR>filename</VAR> is
<CODE>NULL</CODE>, then write the history list to <TT>`~/.history'</TT>.  Values
returned are as in <CODE>read_history ()</CODE>.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, char *filename)</I>
<DD><A NAME="IDX30"></A>
Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(char *filename, int nlines)</I>
<DD><A NAME="IDX31"></A>
Truncate the history file <VAR>filename</VAR>, leaving only the last
<VAR>nlines</VAR> lines.
</DL>

</P>


<H3><A NAME="SEC16" HREF="history.html#TOC16">History Expansion</A></H3>

<P>
These functions implement <CODE>csh</CODE>-like history expansion.

</P>
<P>
<DL>
<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I>
<DD><A NAME="IDX32"></A>
Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer
to a string (see section <A HREF="history.html#SEC2">History Expansion</A>).  Returns:
<DL COMPACT>

<DT><CODE>0</CODE>
<DD>
If no expansions took place (or, if the only change in
the text was the de-slashifying of the history expansion
character);
<DT><CODE>1</CODE>
<DD>
if expansions did take place;
<DT><CODE>-1</CODE>
<DD>
if there was an error in expansion;
<DT><CODE>2</CODE>
<DD>
if the returned line should be displayed, but not executed,
as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">Modifiers</A>).
</DL>

<P>
If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive
error message.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, char *string)</I>
<DD><A NAME="IDX33"></A>
Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR>
arguments present in <VAR>string</VAR>.  Arguments are broken up as in Bash.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> char * <B>get_history_event</B> <I>(char *string, int *cindex, int qchar)</I>
<DD><A NAME="IDX34"></A>
Returns the text of the history event beginning at <VAR>string</VAR> +
<VAR>*cindex</VAR>.  <VAR>*cindex</VAR> is modified to point to after the event
specifier.  At function entry, <VAR>cindex</VAR> points to the index into
<VAR>string</VAR> where the history event specification begins.  <VAR>qchar</VAR>
is a character that is allowed to end the event specification in addition
to the "normal" terminating characters.
</DL>

</P>
<P>
<DL>
<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(char *string)</I>
<DD><A NAME="IDX35"></A>
Return an array of tokens parsed out of <VAR>string</VAR>, much as the
shell might.  The tokens are split on white space and on the
characters <CODE>()&#60;&#62;;&#38;|$</CODE>, and shell quoting conventions are
obeyed.
</DL>

</P>


<H2><A NAME="SEC17" HREF="history.html#TOC17">History Variables</A></H2>

<P>
This section describes the externally visible variables exported by
the GNU History Library.

</P>
<P>
<DL>
<DT><U>Variable:</U> int <B>history_base</B>
<DD><A NAME="IDX36"></A>
The logical offset of the first entry in the history list.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> int <B>history_length</B>
<DD><A NAME="IDX37"></A>
The number of entries currently stored in the history list.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> int <B>max_input_history</B>
<DD><A NAME="IDX38"></A>
The maximum number of history entries.  This must be changed using
<CODE>stifle_history ()</CODE>.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> char <B>history_expansion_char</B>
<DD><A NAME="IDX39"></A>
The character that starts a history event.  The default is <SAMP>`!'</SAMP>.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> char <B>history_subst_char</B>
<DD><A NAME="IDX40"></A>
The character that invokes word substitution if found at the start of
a line.  The default is <SAMP>`^'</SAMP>.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> char <B>history_comment_char</B>
<DD><A NAME="IDX41"></A>
During tokenization, if this character is seen as the first character
of a word, then it and all subsequent characters up to a newline are
ignored, suppressing history expansion for the remainder of the line.
This is disabled by default.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> char * <B>history_no_expand_chars</B>
<DD><A NAME="IDX42"></A>
The list of characters which inhibit history expansion if found immediately
following <VAR>history_expansion_char</VAR>.  The default is whitespace and
<SAMP>`='</SAMP>.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B>
<DD><A NAME="IDX43"></A>
The list of additional characters which can delimit a history search
string, in addition to whitespace, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of
a substring search.  The default is empty.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B>
<DD><A NAME="IDX44"></A>
If non-zero, single-quoted words are not scanned for the history expansion
character.  The default value is 0.
</DL>

</P>
<P>
<DL>
<DT><U>Variable:</U> Function * <B>history_inhibit_expansion_function</B>
<DD><A NAME="IDX45"></A>
This should be set to the address of a function that takes two arguments:
a <CODE>char *</CODE> (<VAR>string</VAR>) and an integer index into that string (<VAR>i</VAR>).
It should return a non-zero value if the history expansion starting at
<VAR>string[i]</VAR> should not be performed; zero if the expansion should
be done.
It is intended for use by applications like Bash that use the history
expansion character for additional purposes.
By default, this variable is set to NULL.
</DL>

</P>


<H2><A NAME="SEC18" HREF="history.html#TOC18">History Programming Example</A></H2>

<P>
The following program demonstrates simple use of the GNU History Library.

</P>

<PRE>
main ()
{
  char line[1024], *t;
  int len, done = 0;

  line[0] = 0;

  using_history ();
  while (!done)
    {
      printf ("history$ ");
      fflush (stdout);
      t = fgets (line, sizeof (line) - 1, stdin);
      if (t &#38;&#38; *t)
        {
          len = strlen (t);
          if (t[len - 1] == '\n')
            t[len - 1] = '\0';
        }

      if (!t)
        strcpy (line, "quit");

      if (line[0])
        {
          char *expansion;
          int result;

          result = history_expand (line, &#38;expansion);
          if (result)
            fprintf (stderr, "%s\n", expansion);

          if (result &#60; 0 || result == 2)
            {
              free (expansion);
              continue;
            }

          add_history (expansion);
          strncpy (line, expansion, sizeof (line) - 1);
          free (expansion);
        }

      if (strcmp (line, "quit") == 0)
        done = 1;
      else if (strcmp (line, "save") == 0)
        write_history ("history_file");
      else if (strcmp (line, "read") == 0)
        read_history ("history_file");
      else if (strcmp (line, "list") == 0)
        {
          register HIST_ENTRY **the_list;
          register int i;

          the_list = history_list ();
          if (the_list)
            for (i = 0; the_list[i]; i++)
              printf ("%d: %s\n", i + history_base, the_list[i]-&#62;line);
        }
      else if (strncmp (line, "delete", 6) == 0)
        {
          int which;
          if ((sscanf (line + 6, "%d", &#38;which)) == 1)
            {
              HIST_ENTRY *entry = remove_history (which);
              if (!entry)
                fprintf (stderr, "No such entry %d\n", which);
              else
                {
                  free (entry-&#62;line);
                  free (entry);
                }
            }
          else
            {
              fprintf (stderr, "non-numeric arg given to `delete'\n");
            }
        }
    }
}
</PRE>



<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1>
<P>
Jump to:
<A HREF="#cindex_a">a</A>
-
<A HREF="#cindex_e">e</A>
-
<A HREF="#cindex_h">h</A>
<P>
<H2><A NAME="cindex_a">a</A></H2>
<DIR>
<LI><A HREF="history.html#IDX23">anchored search</A>
</DIR>
<H2><A NAME="cindex_e">e</A></H2>
<DIR>
<LI><A HREF="history.html#IDX2">event designators</A>
</DIR>
<H2><A NAME="cindex_h">h</A></H2>
<DIR>
<LI><A HREF="history.html#IDX3">history events</A>
<LI><A HREF="history.html#IDX1">history expansion</A>
<LI><A HREF="history.html#IDX22">History Searching</A>
</DIR>

</P>


<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1>
<P>
Jump to:
<A HREF="#vindex_a">a</A>
-
<A HREF="#vindex_c">c</A>
-
<A HREF="#vindex_g">g</A>
-
<A HREF="#vindex_h">h</A>
-
<A HREF="#vindex_m">m</A>
-
<A HREF="#vindex_n">n</A>
-
<A HREF="#vindex_p">p</A>
-
<A HREF="#vindex_r">r</A>
-
<A HREF="#vindex_s">s</A>
-
<A HREF="#vindex_u">u</A>
-
<A HREF="#vindex_w">w</A>
<P>
<H2><A NAME="vindex_a">a</A></H2>
<DIR>
<LI><A HREF="history.html#IDX7">add_history</A>
<LI><A HREF="history.html#IDX30">append_history</A>
</DIR>
<H2><A NAME="vindex_c">c</A></H2>
<DIR>
<LI><A HREF="history.html#IDX10">clear_history</A>
<LI><A HREF="history.html#IDX16">current_history</A>
</DIR>
<H2><A NAME="vindex_g">g</A></H2>
<DIR>
<LI><A HREF="history.html#IDX34">get_history_event</A>
</DIR>
<H2><A NAME="vindex_h">h</A></H2>
<DIR>
<LI><A HREF="history.html#IDX33">history_arg_extract</A>
<LI><A HREF="history.html#IDX36">history_base</A>
<LI><A HREF="history.html#IDX41">history_comment_char</A>
<LI><A HREF="history.html#IDX32">history_expand</A>
<LI><A HREF="history.html#IDX39">history_expansion_char</A>
<LI><A HREF="history.html#IDX17">history_get</A>
<LI><A HREF="history.html#IDX5">history_get_history_state</A>
<LI><A HREF="history.html#IDX45">history_inhibit_expansion_function</A>
<LI><A HREF="history.html#IDX13">history_is_stifled</A>
<LI><A HREF="history.html#IDX37">history_length</A>
<LI><A HREF="history.html#IDX14">history_list</A>
<LI><A HREF="history.html#IDX42">history_no_expand_chars</A>
<LI><A HREF="history.html#IDX44">history_quotes_inhibit_expansion</A>
<LI><A HREF="history.html#IDX24">history_search</A>
<LI><A HREF="history.html#IDX43">history_search_delimiter_chars</A>
<LI><A HREF="history.html#IDX26">history_search_pos</A>
<LI><A HREF="history.html#IDX25">history_search_prefix</A>
<LI><A HREF="history.html#IDX6">history_set_history_state</A>
<LI><A HREF="history.html#IDX19">history_set_pos</A>
<LI><A HREF="history.html#IDX40">history_subst_char</A>
<LI><A HREF="history.html#IDX35">history_tokenize</A>
<LI><A HREF="history.html#IDX18">history_total_bytes</A>
<LI><A HREF="history.html#IDX31">history_truncate_file</A>
</DIR>
<H2><A NAME="vindex_m">m</A></H2>
<DIR>
<LI><A HREF="history.html#IDX38">max_input_history</A>
</DIR>
<H2><A NAME="vindex_n">n</A></H2>
<DIR>
<LI><A HREF="history.html#IDX21">next_history</A>
</DIR>
<H2><A NAME="vindex_p">p</A></H2>
<DIR>
<LI><A HREF="history.html#IDX20">previous_history</A>
</DIR>
<H2><A NAME="vindex_r">r</A></H2>
<DIR>
<LI><A HREF="history.html#IDX27">read_history</A>
<LI><A HREF="history.html#IDX28">read_history_range</A>
<LI><A HREF="history.html#IDX8">remove_history</A>
<LI><A HREF="history.html#IDX9">replace_history_entry</A>
</DIR>
<H2><A NAME="vindex_s">s</A></H2>
<DIR>
<LI><A HREF="history.html#IDX11">stifle_history</A>
</DIR>
<H2><A NAME="vindex_u">u</A></H2>
<DIR>
<LI><A HREF="history.html#IDX12">unstifle_history</A>
<LI><A HREF="history.html#IDX4">using_history</A>
</DIR>
<H2><A NAME="vindex_w">w</A></H2>
<DIR>
<LI><A HREF="history.html#IDX15">where_history</A>
<LI><A HREF="history.html#IDX29">write_history</A>
</DIR>

</P>
<P><HR><P>
This document was generated on 19 January 2000 using the
<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
translator version 1.52.</P>
</BODY>
</HTML>
