Annotation of embedaddon/readline/history.h, revision 1.1.1.2

1.1       misho       1: /* history.h -- the names of functions that you can call in history. */
                      2: 
1.1.1.2 ! misho       3: /* Copyright (C) 1989-2015 Free Software Foundation, Inc.
1.1       misho       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: 
1.1.1.2 ! misho      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. */
1.1       misho      91: extern HIST_ENTRY *remove_history PARAMS((int));
                     92: 
1.1.1.2 ! misho      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: 
1.1       misho     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;
1.1.1.2 ! misho     253: extern int history_offset;
        !           254: 
        !           255: extern int history_lines_read_from_file;
        !           256: extern int history_lines_written_to_file;
        !           257: 
1.1       misho     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;
1.1.1.2 ! misho     264: 
1.1       misho     265: extern int history_quotes_inhibit_expansion;
1.1.1.2 ! misho     266: extern int history_quoting_state;
1.1       misho     267: 
                    268: extern int history_write_timestamps;
                    269: 
1.1.1.2 ! misho     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: 
1.1       misho     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>