File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / readline / doc / hstech.texi
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jul 30 08:16:45 2014 UTC (9 years, 11 months ago) by misho
Branches: readline, MAIN
CVS tags: v6_3p10_cross, v6_3p10, v6_3, p6, HEAD
readline 6.3

    1: @ignore
    2: This file documents the user interface to the GNU History library.
    3: 
    4: Copyright (C) 1988-2014 Free Software Foundation, Inc.
    5: Authored by Brian Fox and Chet Ramey.
    6: 
    7: Permission is granted to make and distribute verbatim copies of this manual
    8: provided the copyright notice and this permission notice are preserved on
    9: all copies.
   10: 
   11: Permission is granted to process this file through Tex and print the
   12: results, provided the printed document carries copying permission notice
   13: identical to this one except for the removal of this paragraph (this
   14: paragraph not being relevant to the printed manual).
   15: 
   16: Permission is granted to copy and distribute modified versions of this
   17: manual under the conditions for verbatim copying, provided also that the
   18: GNU Copyright statement is available to the distributee, and provided that
   19: the entire resulting derived work is distributed under the terms of a
   20: permission notice identical to this one.
   21: 
   22: Permission is granted to copy and distribute translations of this manual
   23: into another language, under the above conditions for modified versions.
   24: @end ignore
   25: 
   26: @node Programming with GNU History
   27: @chapter Programming with GNU History
   28: 
   29: This chapter describes how to interface programs that you write
   30: with the @sc{gnu} History Library.
   31: It should be considered a technical guide.
   32: For information on the interactive use of @sc{gnu} History, @pxref{Using
   33: History Interactively}.
   34: 
   35: @menu
   36: * Introduction to History::	What is the GNU History library for?
   37: * History Storage::		How information is stored.
   38: * History Functions::		Functions that you can use.
   39: * History Variables::		Variables that control behaviour.
   40: * History Programming Example::	Example of using the GNU History Library.
   41: @end menu
   42: 
   43: @node Introduction to History
   44: @section Introduction to History
   45: 
   46: Many programs read input from the user a line at a time.  The @sc{gnu}
   47: History library is able to keep track of those lines, associate arbitrary
   48: data with each line, and utilize information from previous lines in
   49: composing new ones. 
   50: 
   51: The programmer using the History library has available functions
   52: for remembering lines on a history list, associating arbitrary data
   53: with a line, removing lines from the list, searching through the list
   54: for a line containing an arbitrary text string, and referencing any line
   55: in the list directly.  In addition, a history @dfn{expansion} function
   56: is available which provides for a consistent user interface across
   57: different programs.
   58: 
   59: The user using programs written with the History library has the
   60: benefit of a consistent user interface with a set of well-known
   61: commands for manipulating the text of previous lines and using that text
   62: in new commands.  The basic history manipulation commands are similar to
   63: the history substitution provided by @code{csh}.
   64: 
   65: If the programmer desires, he can use the Readline library, which
   66: includes some history manipulation by default, and has the added
   67: advantage of command line editing.
   68: 
   69: Before declaring any functions using any functionality the History
   70: library provides in other code, an application writer should include
   71: the file @code{<readline/history.h>} in any file that uses the
   72: History library's features.  It supplies extern declarations for all
   73: of the library's public functions and variables, and declares all of
   74: the public data structures.
   75: 
   76: @node History Storage
   77: @section History Storage
   78: 
   79: The history list is an array of history entries.  A history entry is
   80: declared as follows:
   81: 
   82: @example
   83: typedef void *histdata_t;
   84: 
   85: typedef struct _hist_entry @{
   86:   char *line;
   87:   char *timestamp;
   88:   histdata_t data;
   89: @} HIST_ENTRY;
   90: @end example
   91: 
   92: The history list itself might therefore be declared as
   93: 
   94: @example
   95: HIST_ENTRY **the_history_list;
   96: @end example
   97: 
   98: The state of the History library is encapsulated into a single structure:
   99: 
  100: @example
  101: /*
  102:  * A structure used to pass around the current state of the history.
  103:  */
  104: typedef struct _hist_state @{
  105:   HIST_ENTRY **entries; /* Pointer to the entries themselves. */
  106:   int offset;           /* The location pointer within this array. */
  107:   int length;           /* Number of elements within this array. */
  108:   int size;             /* Number of slots allocated to this array. */
  109:   int flags;
  110: @} HISTORY_STATE;
  111: @end example
  112: 
  113: If the flags member includes @code{HS_STIFLED}, the history has been
  114: stifled.
  115: 
  116: @node History Functions
  117: @section History Functions
  118: 
  119: This section describes the calling sequence for the various functions
  120: exported by the @sc{gnu} History library.
  121: 
  122: @menu
  123: * Initializing History and State Management::	Functions to call when you
  124: 						want to use history in a
  125: 						program.
  126: * History List Management::		Functions used to manage the list
  127: 					of history entries.
  128: * Information About the History List::	Functions returning information about
  129: 					the history list.
  130: * Moving Around the History List::	Functions used to change the position
  131: 					in the history list.
  132: * Searching the History List::		Functions to search the history list
  133: 					for entries containing a string.
  134: * Managing the History File::		Functions that read and write a file
  135: 					containing the history list.
  136: * History Expansion::			Functions to perform csh-like history
  137: 					expansion.
  138: @end menu
  139: 
  140: @node Initializing History and State Management
  141: @subsection Initializing History and State Management
  142: 
  143: This section describes functions used to initialize and manage
  144: the state of the History library when you want to use the history
  145: functions in your program.
  146: 
  147: @deftypefun void using_history (void)
  148: Begin a session in which the history functions might be used.  This
  149: initializes the interactive variables.
  150: @end deftypefun
  151: 
  152: @deftypefun {HISTORY_STATE *} history_get_history_state (void)
  153: Return a structure describing the current state of the input history.
  154: @end deftypefun
  155: 
  156: @deftypefun void history_set_history_state (HISTORY_STATE *state)
  157: Set the state of the history list according to @var{state}.
  158: @end deftypefun
  159: 
  160: @node History List Management
  161: @subsection History List Management
  162: 
  163: These functions manage individual entries on the history list, or set
  164: parameters managing the list itself.
  165: 
  166: @deftypefun void add_history (const char *string)
  167: Place @var{string} at the end of the history list.  The associated data
  168: field (if any) is set to @code{NULL}.
  169: @end deftypefun
  170: 
  171: @deftypefun void add_history_time (const char *string)
  172: Change the time stamp associated with the most recent history entry to
  173: @var{string}.
  174: @end deftypefun
  175: 
  176: @deftypefun {HIST_ENTRY *} remove_history (int which)
  177: Remove history entry at offset @var{which} from the history.  The
  178: removed element is returned so you can free the line, data,
  179: and containing structure.
  180: @end deftypefun
  181: 
  182: @deftypefun {histdata_t} free_history_entry (HIST_ENTRY *histent)
  183: Free the history entry @var{histent} and any history library private
  184: data associated with it.  Returns the application-specific data
  185: so the caller can dispose of it.
  186: @end deftypefun
  187: 
  188: @deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data)
  189: Make the history entry at offset @var{which} have @var{line} and @var{data}.
  190: This returns the old entry so the caller can dispose of any
  191: application-specific data.  In the case
  192: of an invalid @var{which}, a @code{NULL} pointer is returned.
  193: @end deftypefun
  194: 
  195: @deftypefun void clear_history (void)
  196: Clear the history list by deleting all the entries.
  197: @end deftypefun
  198: 
  199: @deftypefun void stifle_history (int max)
  200: Stifle the history list, remembering only the last @var{max} entries.
  201: @end deftypefun
  202: 
  203: @deftypefun int unstifle_history (void)
  204: Stop stifling the history.  This returns the previously-set
  205: maximum number of history entries (as set by @code{stifle_history()}).
  206: The value is positive if the history was
  207: stifled, negative if it wasn't.
  208: @end deftypefun
  209: 
  210: @deftypefun int history_is_stifled (void)
  211: Returns non-zero if the history is stifled, zero if it is not.
  212: @end deftypefun
  213: 
  214: @node Information About the History List
  215: @subsection Information About the History List
  216: 
  217: These functions return information about the entire history list or
  218: individual list entries.
  219: 
  220: @deftypefun {HIST_ENTRY **} history_list (void)
  221: Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the
  222: current input history.  Element 0 of this list is the beginning of time.
  223: If there is no history, return @code{NULL}.
  224: @end deftypefun
  225: 
  226: @deftypefun int where_history (void)
  227: Returns the offset of the current history element.
  228: @end deftypefun
  229: 
  230: @deftypefun {HIST_ENTRY *} current_history (void)
  231: Return the history entry at the current position, as determined by
  232: @code{where_history()}.  If there is no entry there, return a @code{NULL}
  233: pointer.
  234: @end deftypefun
  235: 
  236: @deftypefun {HIST_ENTRY *} history_get (int offset)
  237: Return the history entry at position @var{offset}, starting from
  238: @code{history_base} (@pxref{History Variables}).
  239: If there is no entry there, or if @var{offset}
  240: is greater than the history length, return a @code{NULL} pointer.
  241: @end deftypefun
  242: 
  243: @deftypefun time_t history_get_time (HIST_ENTRY *entry)
  244: Return the time stamp associated with the history entry @var{entry}.
  245: @end deftypefun
  246: 
  247: @deftypefun int history_total_bytes (void)
  248: Return the number of bytes that the primary history entries are using.
  249: This function returns the sum of the lengths of all the lines in the
  250: history.
  251: @end deftypefun
  252: 
  253: @node Moving Around the History List
  254: @subsection Moving Around the History List
  255: 
  256: These functions allow the current index into the history list to be
  257: set or changed.
  258: 
  259: @deftypefun int history_set_pos (int pos)
  260: Set the current history offset to @var{pos}, an absolute index
  261: into the list.
  262: Returns 1 on success, 0 if @var{pos} is less than zero or greater
  263: than the number of history entries.
  264: @end deftypefun
  265: 
  266: @deftypefun {HIST_ENTRY *} previous_history (void)
  267: Back up the current history offset to the previous history entry, and
  268: return a pointer to that entry.  If there is no previous entry, return
  269: a @code{NULL} pointer.
  270: @end deftypefun
  271: 
  272: @deftypefun {HIST_ENTRY *} next_history (void)
  273: Move the current history offset forward to the next history entry, and
  274: return the a pointer to that entry.  If there is no next entry, return
  275: a @code{NULL} pointer.
  276: @end deftypefun
  277: 
  278: @node Searching the History List
  279: @subsection Searching the History List
  280: @cindex History Searching
  281: 
  282: These functions allow searching of the history list for entries containing
  283: a specific string.  Searching may be performed both forward and backward
  284: from the current history position.  The search may be @dfn{anchored},
  285: meaning that the string must match at the beginning of the history entry.
  286: @cindex anchored search
  287: 
  288: @deftypefun int history_search (const char *string, int direction)
  289: Search the history for @var{string}, starting at the current history offset.
  290: If @var{direction} is less than 0, then the search is through
  291: previous entries, otherwise through subsequent entries.
  292: If @var{string} is found, then
  293: the current history index is set to that history entry, and the value
  294: returned is the offset in the line of the entry where
  295: @var{string} was found.  Otherwise, nothing is changed, and a -1 is
  296: returned.
  297: @end deftypefun
  298: 
  299: @deftypefun int history_search_prefix (const char *string, int direction)
  300: Search the history for @var{string}, starting at the current history
  301: offset.  The search is anchored: matching lines must begin with
  302: @var{string}.  If @var{direction} is less than 0, then the search is
  303: through previous entries, otherwise through subsequent entries.
  304: If @var{string} is found, then the
  305: current history index is set to that entry, and the return value is 0. 
  306: Otherwise, nothing is changed, and a -1 is returned. 
  307: @end deftypefun
  308: 
  309: @deftypefun int history_search_pos (const char *string, int direction, int pos)
  310: Search for @var{string} in the history list, starting at @var{pos}, an
  311: absolute index into the list.  If @var{direction} is negative, the search
  312: proceeds backward from @var{pos}, otherwise forward.  Returns the absolute
  313: index of the history element where @var{string} was found, or -1 otherwise.
  314: @end deftypefun
  315: 
  316: @node Managing the History File
  317: @subsection Managing the History File
  318: 
  319: The History library can read the history from and write it to a file.
  320: This section documents the functions for managing a history file.
  321: 
  322: @deftypefun int read_history (const char *filename)
  323: Add the contents of @var{filename} to the history list, a line at a time.
  324: If @var{filename} is @code{NULL}, then read from @file{~/.history}.
  325: Returns 0 if successful, or @code{errno} if not.
  326: @end deftypefun
  327: 
  328: @deftypefun int read_history_range (const char *filename, int from, int to)
  329: Read a range of lines from @var{filename}, adding them to the history list.
  330: Start reading at line @var{from} and end at @var{to}.
  331: If @var{from} is zero, start at the beginning.  If @var{to} is less than
  332: @var{from}, then read until the end of the file.  If @var{filename} is
  333: @code{NULL}, then read from @file{~/.history}.  Returns 0 if successful,
  334: or @code{errno} if not.
  335: @end deftypefun
  336: 
  337: @deftypefun int write_history (const char *filename)
  338: Write the current history to @var{filename}, overwriting @var{filename}
  339: if necessary.
  340: If @var{filename} is @code{NULL}, then write the history list to
  341: @file{~/.history}.
  342: Returns 0 on success, or @code{errno} on a read or write error.
  343: @end deftypefun
  344: 
  345: @deftypefun int append_history (int nelements, const char *filename)
  346: Append the last @var{nelements} of the history list to @var{filename}.
  347: If @var{filename} is @code{NULL}, then append to @file{~/.history}.
  348: Returns 0 on success, or @code{errno} on a read or write error.
  349: @end deftypefun
  350: 
  351: @deftypefun int history_truncate_file (const char *filename, int nlines)
  352: Truncate the history file @var{filename}, leaving only the last
  353: @var{nlines} lines.
  354: If @var{filename} is @code{NULL}, then @file{~/.history} is truncated.
  355: Returns 0 on success, or @code{errno} on failure.
  356: @end deftypefun
  357: 
  358: @node History Expansion
  359: @subsection History Expansion
  360: 
  361: These functions implement history expansion.
  362: 
  363: @deftypefun int history_expand (char *string, char **output)
  364: Expand @var{string}, placing the result into @var{output}, a pointer
  365: to a string (@pxref{History Interaction}).  Returns:
  366: @table @code
  367: @item 0
  368: If no expansions took place (or, if the only change in
  369: the text was the removal of escape characters preceding the history expansion
  370: character);
  371: @item 1
  372: if expansions did take place;
  373: @item -1
  374: if there was an error in expansion;
  375: @item 2
  376: if the returned line should be displayed, but not executed,
  377: as with the @code{:p} modifier (@pxref{Modifiers}).
  378: @end table
  379: 
  380: If an error occurred in expansion, then @var{output} contains a descriptive
  381: error message.
  382: @end deftypefun
  383: 
  384: @deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar)
  385: Returns the text of the history event beginning at @var{string} +
  386: @var{*cindex}.  @var{*cindex} is modified to point to after the event
  387: specifier.  At function entry, @var{cindex} points to the index into
  388: @var{string} where the history event specification begins.  @var{qchar}
  389: is a character that is allowed to end the event specification in addition
  390: to the ``normal'' terminating characters.
  391: @end deftypefun
  392: 
  393: @deftypefun {char **} history_tokenize (const char *string)
  394: Return an array of tokens parsed out of @var{string}, much as the
  395: shell might.  The tokens are split on the characters in the
  396: @var{history_word_delimiters} variable,
  397: and shell quoting conventions are obeyed.
  398: @end deftypefun
  399: 
  400: @deftypefun {char *} history_arg_extract (int first, int last, const char *string)
  401: Extract a string segment consisting of the @var{first} through @var{last}
  402: arguments present in @var{string}.  Arguments are split using
  403: @code{history_tokenize}.
  404: @end deftypefun
  405: 
  406: @node History Variables
  407: @section History Variables
  408: 
  409: This section describes the externally-visible variables exported by
  410: the @sc{gnu} History Library.
  411: 
  412: @deftypevar int history_base
  413: The logical offset of the first entry in the history list.
  414: @end deftypevar
  415: 
  416: @deftypevar int history_length
  417: The number of entries currently stored in the history list.
  418: @end deftypevar
  419: 
  420: @deftypevar int history_max_entries
  421: The maximum number of history entries.  This must be changed using
  422: @code{stifle_history()}.
  423: @end deftypevar
  424: 
  425: @deftypevar int history_write_timestamps
  426: If non-zero, timestamps are written to the history file, so they can be
  427: preserved between sessions.  The default value is 0, meaning that
  428: timestamps are not saved.
  429: 
  430: The current timestamp format uses the value of @var{history_comment_char}
  431: to delimit timestamp entries in the history file.  If that variable does
  432: not have a value (the default), timestamps will not be written.
  433: @end deftypevar
  434: 
  435: @deftypevar char history_expansion_char
  436: The character that introduces a history event.  The default is @samp{!}.
  437: Setting this to 0 inhibits history expansion.
  438: @end deftypevar
  439: 
  440: @deftypevar char history_subst_char
  441: The character that invokes word substitution if found at the start of
  442: a line.  The default is @samp{^}.
  443: @end deftypevar
  444: 
  445: @deftypevar char history_comment_char
  446: During tokenization, if this character is seen as the first character
  447: of a word, then it and all subsequent characters up to a newline are
  448: ignored, suppressing history expansion for the remainder of the line.
  449: This is disabled by default.
  450: @end deftypevar
  451: 
  452: @deftypevar {char *} history_word_delimiters
  453: The characters that separate tokens for @code{history_tokenize()}.
  454: The default value is @code{" \t\n()<>;&|"}.
  455: @end deftypevar
  456: 
  457: @deftypevar {char *} history_search_delimiter_chars
  458: The list of additional characters which can delimit a history search
  459: string, in addition to space, TAB, @samp{:} and @samp{?} in the case of
  460: a substring search.  The default is empty.
  461: @end deftypevar
  462: 
  463: @deftypevar {char *} history_no_expand_chars
  464: The list of characters which inhibit history expansion if found immediately
  465: following @var{history_expansion_char}.  The default is space, tab, newline,
  466: carriage return, and @samp{=}.
  467: @end deftypevar
  468: 
  469: @deftypevar int history_quotes_inhibit_expansion
  470: If non-zero, single-quoted words are not scanned for the history expansion
  471: character.  The default value is 0.
  472: @end deftypevar
  473: 
  474: @deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function
  475: This should be set to the address of a function that takes two arguments:
  476: a @code{char *} (@var{string})
  477: and an @code{int} index into that string (@var{i}).
  478: It should return a non-zero value if the history expansion starting at
  479: @var{string[i]} should not be performed; zero if the expansion should
  480: be done.
  481: It is intended for use by applications like Bash that use the history
  482: expansion character for additional purposes.
  483: By default, this variable is set to @code{NULL}.
  484: @end deftypevar
  485: 
  486: @node History Programming Example
  487: @section History Programming Example
  488: 
  489: The following program demonstrates simple use of the @sc{gnu} History Library.
  490: 
  491: @smallexample
  492: #include <stdio.h>
  493: #include <readline/history.h>
  494: 
  495: main (argc, argv)
  496:      int argc;
  497:      char **argv;
  498: @{
  499:   char line[1024], *t;
  500:   int len, done = 0;
  501: 
  502:   line[0] = 0;
  503: 
  504:   using_history ();
  505:   while (!done)
  506:     @{
  507:       printf ("history$ ");
  508:       fflush (stdout);
  509:       t = fgets (line, sizeof (line) - 1, stdin);
  510:       if (t && *t)
  511:         @{
  512:           len = strlen (t);
  513:           if (t[len - 1] == '\n')
  514:             t[len - 1] = '\0';
  515:         @}
  516: 
  517:       if (!t)
  518:         strcpy (line, "quit");
  519: 
  520:       if (line[0])
  521:         @{
  522:           char *expansion;
  523:           int result;
  524: 
  525:           result = history_expand (line, &expansion);
  526:           if (result)
  527:             fprintf (stderr, "%s\n", expansion);
  528: 
  529:           if (result < 0 || result == 2)
  530:             @{
  531:               free (expansion);
  532:               continue;
  533:             @}
  534: 
  535:           add_history (expansion);
  536:           strncpy (line, expansion, sizeof (line) - 1);
  537:           free (expansion);
  538:         @}
  539: 
  540:       if (strcmp (line, "quit") == 0)
  541:         done = 1;
  542:       else if (strcmp (line, "save") == 0)
  543:         write_history ("history_file");
  544:       else if (strcmp (line, "read") == 0)
  545:         read_history ("history_file");
  546:       else if (strcmp (line, "list") == 0)
  547:         @{
  548:           register HIST_ENTRY **the_list;
  549:           register int i;
  550: 
  551:           the_list = history_list ();
  552:           if (the_list)
  553:             for (i = 0; the_list[i]; i++)
  554:               printf ("%d: %s\n", i + history_base, the_list[i]->line);
  555:         @}
  556:       else if (strncmp (line, "delete", 6) == 0)
  557:         @{
  558:           int which;
  559:           if ((sscanf (line + 6, "%d", &which)) == 1)
  560:             @{
  561:               HIST_ENTRY *entry = remove_history (which);
  562:               if (!entry)
  563:                 fprintf (stderr, "No such entry %d\n", which);
  564:               else
  565:                 @{
  566:                   free (entry->line);
  567:                   free (entry);
  568:                 @}
  569:             @}
  570:           else
  571:             @{
  572:               fprintf (stderr, "non-numeric arg given to `delete'\n");
  573:             @}
  574:         @}
  575:     @}
  576: @}
  577: @end smallexample

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>