File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / readline / history.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 01:01:01 2021 UTC (3 years, 3 months ago) by misho
Branches: readline, MAIN
CVS tags: v8_2p0, v8_1p0, HEAD
readline 8.1

    1: /* history.h -- the names of functions that you can call in history. */
    2: 
    3: /* Copyright (C) 1989-2015 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: /* Remove an entry from the history list.  WHICH is the magic number that
   90:    tells us which element to delete.  The elements are numbered from 0. */
   91: extern HIST_ENTRY *remove_history PARAMS((int));
   92: 
   93: /* Remove a set of entries from the history list: FIRST to LAST, inclusive */
   94: extern HIST_ENTRY **remove_history_range PARAMS((int, int));
   95: 
   96: /* Allocate a history entry consisting of STRING and TIMESTAMP and return
   97:    a pointer to it. */
   98: extern HIST_ENTRY *alloc_history_entry PARAMS((char *, char *));
   99: 
  100: /* Copy the history entry H, but not the (opaque) data pointer */
  101: extern HIST_ENTRY *copy_history_entry PARAMS((HIST_ENTRY *));
  102: 
  103: /* Free the history entry H and return any application-specific data
  104:    associated with it. */
  105: extern histdata_t free_history_entry PARAMS((HIST_ENTRY *));
  106: 
  107: /* Make the history entry at WHICH have LINE and DATA.  This returns
  108:    the old entry so you can dispose of the data.  In the case of an
  109:    invalid WHICH, a NULL pointer is returned. */
  110: extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t));
  111: 
  112: /* Clear the history list and start over. */
  113: extern void clear_history PARAMS((void));
  114: 
  115: /* Stifle the history list, remembering only MAX number of entries. */
  116: extern void stifle_history PARAMS((int));
  117: 
  118: /* Stop stifling the history.  This returns the previous amount the
  119:    history was stifled by.  The value is positive if the history was
  120:    stifled, negative if it wasn't. */
  121: extern int unstifle_history PARAMS((void));
  122: 
  123: /* Return 1 if the history is stifled, 0 if it is not. */
  124: extern int history_is_stifled PARAMS((void));
  125: 
  126: /* Information about the history list. */
  127: 
  128: /* Return a NULL terminated array of HIST_ENTRY which is the current input
  129:    history.  Element 0 of this list is the beginning of time.  If there
  130:    is no history, return NULL. */
  131: extern HIST_ENTRY **history_list PARAMS((void));
  132: 
  133: /* Returns the number which says what history element we are now
  134:    looking at.  */
  135: extern int where_history PARAMS((void));
  136:   
  137: /* Return the history entry at the current position, as determined by
  138:    history_offset.  If there is no entry there, return a NULL pointer. */
  139: extern HIST_ENTRY *current_history PARAMS((void));
  140: 
  141: /* Return the history entry which is logically at OFFSET in the history
  142:    array.  OFFSET is relative to history_base. */
  143: extern HIST_ENTRY *history_get PARAMS((int));
  144: 
  145: /* Return the timestamp associated with the HIST_ENTRY * passed as an
  146:    argument */
  147: extern time_t history_get_time PARAMS((HIST_ENTRY *));
  148: 
  149: /* Return the number of bytes that the primary history entries are using.
  150:    This just adds up the lengths of the_history->lines. */
  151: extern int history_total_bytes PARAMS((void));
  152: 
  153: /* Moving around the history list. */
  154: 
  155: /* Set the position in the history list to POS. */
  156: extern int history_set_pos PARAMS((int));
  157: 
  158: /* Back up history_offset to the previous history entry, and return
  159:    a pointer to that entry.  If there is no previous entry, return
  160:    a NULL pointer. */
  161: extern HIST_ENTRY *previous_history PARAMS((void));
  162: 
  163: /* Move history_offset forward to the next item in the input_history,
  164:    and return the a pointer to that entry.  If there is no next entry,
  165:    return a NULL pointer. */
  166: extern HIST_ENTRY *next_history PARAMS((void));
  167: 
  168: /* Searching the history list. */
  169: 
  170: /* Search the history for STRING, starting at history_offset.
  171:    If DIRECTION < 0, then the search is through previous entries,
  172:    else through subsequent.  If the string is found, then
  173:    current_history () is the history entry, and the value of this function
  174:    is the offset in the line of that history entry that the string was
  175:    found in.  Otherwise, nothing is changed, and a -1 is returned. */
  176: extern int history_search PARAMS((const char *, int));
  177: 
  178: /* Search the history for STRING, starting at history_offset.
  179:    The search is anchored: matching lines must begin with string.
  180:    DIRECTION is as in history_search(). */
  181: extern int history_search_prefix PARAMS((const char *, int));
  182: 
  183: /* Search for STRING in the history list, starting at POS, an
  184:    absolute index into the list.  DIR, if negative, says to search
  185:    backwards from POS, else forwards.
  186:    Returns the absolute index of the history element where STRING
  187:    was found, or -1 otherwise. */
  188: extern int history_search_pos PARAMS((const char *, int, int));
  189: 
  190: /* Managing the history file. */
  191: 
  192: /* Add the contents of FILENAME to the history list, a line at a time.
  193:    If FILENAME is NULL, then read from ~/.history.  Returns 0 if
  194:    successful, or errno if not. */
  195: extern int read_history PARAMS((const char *));
  196: 
  197: /* Read a range of lines from FILENAME, adding them to the history list.
  198:    Start reading at the FROM'th line and end at the TO'th.  If FROM
  199:    is zero, start at the beginning.  If TO is less than FROM, read
  200:    until the end of the file.  If FILENAME is NULL, then read from
  201:    ~/.history.  Returns 0 if successful, or errno if not. */
  202: extern int read_history_range PARAMS((const char *, int, int));
  203: 
  204: /* Write the current history to FILENAME.  If FILENAME is NULL,
  205:    then write the history list to ~/.history.  Values returned
  206:    are as in read_history ().  */
  207: extern int write_history PARAMS((const char *));
  208: 
  209: /* Append NELEMENT entries to FILENAME.  The entries appended are from
  210:    the end of the list minus NELEMENTs up to the end of the list. */
  211: extern int append_history PARAMS((int, const char *));
  212: 
  213: /* Truncate the history file, leaving only the last NLINES lines. */
  214: extern int history_truncate_file PARAMS((const char *, int));
  215: 
  216: /* History expansion. */
  217: 
  218: /* Expand the string STRING, placing the result into OUTPUT, a pointer
  219:    to a string.  Returns:
  220: 
  221:    0) If no expansions took place (or, if the only change in
  222:       the text was the de-slashifying of the history expansion
  223:       character)
  224:    1) If expansions did take place
  225:   -1) If there was an error in expansion.
  226:    2) If the returned line should just be printed.
  227: 
  228:   If an error occurred in expansion, then OUTPUT contains a descriptive
  229:   error message. */
  230: extern int history_expand PARAMS((char *, char **));
  231: 
  232: /* Extract a string segment consisting of the FIRST through LAST
  233:    arguments present in STRING.  Arguments are broken up as in
  234:    the shell. */
  235: extern char *history_arg_extract PARAMS((int, int, const char *));
  236: 
  237: /* Return the text of the history event beginning at the current
  238:    offset into STRING.  Pass STRING with *INDEX equal to the
  239:    history_expansion_char that begins this specification.
  240:    DELIMITING_QUOTE is a character that is allowed to end the string
  241:    specification for what to search for in addition to the normal
  242:    characters `:', ` ', `\t', `\n', and sometimes `?'. */
  243: extern char *get_history_event PARAMS((const char *, int *, int));
  244: 
  245: /* Return an array of tokens, much as the shell might.  The tokens are
  246:    parsed out of STRING. */
  247: extern char **history_tokenize PARAMS((const char *));
  248: 
  249: /* Exported history variables. */
  250: extern int history_base;
  251: extern int history_length;
  252: extern int history_max_entries;
  253: extern int history_offset;
  254: 
  255: extern int history_lines_read_from_file;
  256: extern int history_lines_written_to_file;
  257: 
  258: extern char history_expansion_char;
  259: extern char history_subst_char;
  260: extern char *history_word_delimiters;
  261: extern char history_comment_char;
  262: extern char *history_no_expand_chars;
  263: extern char *history_search_delimiter_chars;
  264: 
  265: extern int history_quotes_inhibit_expansion;
  266: extern int history_quoting_state;
  267: 
  268: extern int history_write_timestamps;
  269: 
  270: /* These two are undocumented; the second is reserved for future use */
  271: extern int history_multiline_entries;
  272: extern int history_file_version;
  273: 
  274: /* Backwards compatibility */
  275: extern int max_input_history;
  276: 
  277: /* If set, this function is called to decide whether or not a particular
  278:    history expansion should be treated as a special case for the calling
  279:    application and not expanded. */
  280: extern rl_linebuf_func_t *history_inhibit_expansion_function;
  281: 
  282: #ifdef __cplusplus
  283: }
  284: #endif
  285: 
  286: #endif /* !_HISTORY_H_ */

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