File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / readline / history.h
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: /* history.h -- the names of functions that you can call in history. */
    2: 
    3: /* Copyright (C) 1989-2009 Free Software Foundation, Inc.
    4: 
    5:    This file contains the GNU History Library (History), a set of
    6:    routines for managing the text of previously typed lines.
    7: 
    8:    History is free software: you can redistribute it and/or modify
    9:    it under the terms of the GNU General Public License as published by
   10:    the Free Software Foundation, either version 3 of the License, or
   11:    (at your option) any later version.
   12: 
   13:    History is distributed in the hope that it will be useful,
   14:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   15:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16:    GNU General Public License for more details.
   17: 
   18:    You should have received a copy of the GNU General Public License
   19:    along with History.  If not, see <http://www.gnu.org/licenses/>.
   20: */
   21: 
   22: #ifndef _HISTORY_H_
   23: #define _HISTORY_H_
   24: 
   25: #ifdef __cplusplus
   26: extern "C" {
   27: #endif
   28: 
   29: #include <time.h>		/* XXX - for history timestamp code */
   30: 
   31: #if defined READLINE_LIBRARY
   32: #  include "rlstdc.h"
   33: #  include "rltypedefs.h"
   34: #else
   35: #  include <readline/rlstdc.h>
   36: #  include <readline/rltypedefs.h>
   37: #endif
   38: 
   39: #ifdef __STDC__
   40: typedef void *histdata_t;
   41: #else
   42: typedef char *histdata_t;
   43: #endif
   44: 
   45: /* The structure used to store a history entry. */
   46: typedef struct _hist_entry {
   47:   char *line;
   48:   char *timestamp;		/* char * rather than time_t for read/write */
   49:   histdata_t data;
   50: } HIST_ENTRY;
   51: 
   52: /* Size of the history-library-managed space in history entry HS. */
   53: #define HISTENT_BYTES(hs)	(strlen ((hs)->line) + strlen ((hs)->timestamp))
   54: 
   55: /* A structure used to pass the current state of the history stuff around. */
   56: typedef struct _hist_state {
   57:   HIST_ENTRY **entries;		/* Pointer to the entries themselves. */
   58:   int offset;			/* The location pointer within this array. */
   59:   int length;			/* Number of elements within this array. */
   60:   int size;			/* Number of slots allocated to this array. */
   61:   int flags;
   62: } HISTORY_STATE;
   63: 
   64: /* Flag values for the `flags' member of HISTORY_STATE. */
   65: #define HS_STIFLED	0x01
   66: 
   67: /* Initialization and state management. */
   68: 
   69: /* Begin a session in which the history functions might be used.  This
   70:    just initializes the interactive variables. */
   71: extern void using_history PARAMS((void));
   72: 
   73: /* Return the current HISTORY_STATE of the history. */
   74: extern HISTORY_STATE *history_get_history_state PARAMS((void));
   75: 
   76: /* Set the state of the current history array to STATE. */
   77: extern void history_set_history_state PARAMS((HISTORY_STATE *));
   78: 
   79: /* Manage the history list. */
   80: 
   81: /* Place STRING at the end of the history list.
   82:    The associated data field (if any) is set to NULL. */
   83: extern void add_history PARAMS((const char *));
   84: 
   85: /* Change the timestamp associated with the most recent history entry to
   86:    STRING. */
   87: extern void add_history_time PARAMS((const char *));
   88: 
   89: /* A reasonably useless function, only here for completeness.  WHICH
   90:    is the magic number that tells us which element to delete.  The
   91:    elements are numbered from 0. */
   92: extern HIST_ENTRY *remove_history PARAMS((int));
   93: 
   94: /* Free the history entry H and return any application-specific data
   95:    associated with it. */
   96: extern histdata_t free_history_entry PARAMS((HIST_ENTRY *));
   97: 
   98: /* Make the history entry at WHICH have LINE and DATA.  This returns
   99:    the old entry so you can dispose of the data.  In the case of an
  100:    invalid WHICH, a NULL pointer is returned. */
  101: extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t));
  102: 
  103: /* Clear the history list and start over. */
  104: extern void clear_history PARAMS((void));
  105: 
  106: /* Stifle the history list, remembering only MAX number of entries. */
  107: extern void stifle_history PARAMS((int));
  108: 
  109: /* Stop stifling the history.  This returns the previous amount the
  110:    history was stifled by.  The value is positive if the history was
  111:    stifled, negative if it wasn't. */
  112: extern int unstifle_history PARAMS((void));
  113: 
  114: /* Return 1 if the history is stifled, 0 if it is not. */
  115: extern int history_is_stifled PARAMS((void));
  116: 
  117: /* Information about the history list. */
  118: 
  119: /* Return a NULL terminated array of HIST_ENTRY which is the current input
  120:    history.  Element 0 of this list is the beginning of time.  If there
  121:    is no history, return NULL. */
  122: extern HIST_ENTRY **history_list PARAMS((void));
  123: 
  124: /* Returns the number which says what history element we are now
  125:    looking at.  */
  126: extern int where_history PARAMS((void));
  127:   
  128: /* Return the history entry at the current position, as determined by
  129:    history_offset.  If there is no entry there, return a NULL pointer. */
  130: extern HIST_ENTRY *current_history PARAMS((void));
  131: 
  132: /* Return the history entry which is logically at OFFSET in the history
  133:    array.  OFFSET is relative to history_base. */
  134: extern HIST_ENTRY *history_get PARAMS((int));
  135: 
  136: /* Return the timestamp associated with the HIST_ENTRY * passed as an
  137:    argument */
  138: extern time_t history_get_time PARAMS((HIST_ENTRY *));
  139: 
  140: /* Return the number of bytes that the primary history entries are using.
  141:    This just adds up the lengths of the_history->lines. */
  142: extern int history_total_bytes PARAMS((void));
  143: 
  144: /* Moving around the history list. */
  145: 
  146: /* Set the position in the history list to POS. */
  147: extern int history_set_pos PARAMS((int));
  148: 
  149: /* Back up history_offset to the previous history entry, and return
  150:    a pointer to that entry.  If there is no previous entry, return
  151:    a NULL pointer. */
  152: extern HIST_ENTRY *previous_history PARAMS((void));
  153: 
  154: /* Move history_offset forward to the next item in the input_history,
  155:    and return the a pointer to that entry.  If there is no next entry,
  156:    return a NULL pointer. */
  157: extern HIST_ENTRY *next_history PARAMS((void));
  158: 
  159: /* Searching the history list. */
  160: 
  161: /* Search the history for STRING, starting at history_offset.
  162:    If DIRECTION < 0, then the search is through previous entries,
  163:    else through subsequent.  If the string is found, then
  164:    current_history () is the history entry, and the value of this function
  165:    is the offset in the line of that history entry that the string was
  166:    found in.  Otherwise, nothing is changed, and a -1 is returned. */
  167: extern int history_search PARAMS((const char *, int));
  168: 
  169: /* Search the history for STRING, starting at history_offset.
  170:    The search is anchored: matching lines must begin with string.
  171:    DIRECTION is as in history_search(). */
  172: extern int history_search_prefix PARAMS((const char *, int));
  173: 
  174: /* Search for STRING in the history list, starting at POS, an
  175:    absolute index into the list.  DIR, if negative, says to search
  176:    backwards from POS, else forwards.
  177:    Returns the absolute index of the history element where STRING
  178:    was found, or -1 otherwise. */
  179: extern int history_search_pos PARAMS((const char *, int, int));
  180: 
  181: /* Managing the history file. */
  182: 
  183: /* Add the contents of FILENAME to the history list, a line at a time.
  184:    If FILENAME is NULL, then read from ~/.history.  Returns 0 if
  185:    successful, or errno if not. */
  186: extern int read_history PARAMS((const char *));
  187: 
  188: /* Read a range of lines from FILENAME, adding them to the history list.
  189:    Start reading at the FROM'th line and end at the TO'th.  If FROM
  190:    is zero, start at the beginning.  If TO is less than FROM, read
  191:    until the end of the file.  If FILENAME is NULL, then read from
  192:    ~/.history.  Returns 0 if successful, or errno if not. */
  193: extern int read_history_range PARAMS((const char *, int, int));
  194: 
  195: /* Write the current history to FILENAME.  If FILENAME is NULL,
  196:    then write the history list to ~/.history.  Values returned
  197:    are as in read_history ().  */
  198: extern int write_history PARAMS((const char *));
  199: 
  200: /* Append NELEMENT entries to FILENAME.  The entries appended are from
  201:    the end of the list minus NELEMENTs up to the end of the list. */
  202: extern int append_history PARAMS((int, const char *));
  203: 
  204: /* Truncate the history file, leaving only the last NLINES lines. */
  205: extern int history_truncate_file PARAMS((const char *, int));
  206: 
  207: /* History expansion. */
  208: 
  209: /* Expand the string STRING, placing the result into OUTPUT, a pointer
  210:    to a string.  Returns:
  211: 
  212:    0) If no expansions took place (or, if the only change in
  213:       the text was the de-slashifying of the history expansion
  214:       character)
  215:    1) If expansions did take place
  216:   -1) If there was an error in expansion.
  217:    2) If the returned line should just be printed.
  218: 
  219:   If an error occurred in expansion, then OUTPUT contains a descriptive
  220:   error message. */
  221: extern int history_expand PARAMS((char *, char **));
  222: 
  223: /* Extract a string segment consisting of the FIRST through LAST
  224:    arguments present in STRING.  Arguments are broken up as in
  225:    the shell. */
  226: extern char *history_arg_extract PARAMS((int, int, const char *));
  227: 
  228: /* Return the text of the history event beginning at the current
  229:    offset into STRING.  Pass STRING with *INDEX equal to the
  230:    history_expansion_char that begins this specification.
  231:    DELIMITING_QUOTE is a character that is allowed to end the string
  232:    specification for what to search for in addition to the normal
  233:    characters `:', ` ', `\t', `\n', and sometimes `?'. */
  234: extern char *get_history_event PARAMS((const char *, int *, int));
  235: 
  236: /* Return an array of tokens, much as the shell might.  The tokens are
  237:    parsed out of STRING. */
  238: extern char **history_tokenize PARAMS((const char *));
  239: 
  240: /* Exported history variables. */
  241: extern int history_base;
  242: extern int history_length;
  243: extern int history_max_entries;
  244: extern char history_expansion_char;
  245: extern char history_subst_char;
  246: extern char *history_word_delimiters;
  247: extern char history_comment_char;
  248: extern char *history_no_expand_chars;
  249: extern char *history_search_delimiter_chars;
  250: extern int history_quotes_inhibit_expansion;
  251: 
  252: extern int history_write_timestamps;
  253: 
  254: /* Backwards compatibility */
  255: extern int max_input_history;
  256: 
  257: /* If set, this function is called to decide whether or not a particular
  258:    history expansion should be treated as a special case for the calling
  259:    application and not expanded. */
  260: extern rl_linebuf_func_t *history_inhibit_expansion_function;
  261: 
  262: #ifdef __cplusplus
  263: }
  264: #endif
  265: 
  266: #endif /* !_HISTORY_H_ */

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