histedit.h revision 170547
118334Speter/*- 218334Speter * Copyright (c) 1992, 1993 318334Speter * The Regents of the University of California. All rights reserved. 418334Speter * 518334Speter * This code is derived from software contributed to Berkeley by 618334Speter * Christos Zoulas of Cornell University. 718334Speter * 818334Speter * Redistribution and use in source and binary forms, with or without 918334Speter * modification, are permitted provided that the following conditions 1018334Speter * are met: 1118334Speter * 1. Redistributions of source code must retain the above copyright 1218334Speter * notice, this list of conditions and the following disclaimer. 1318334Speter * 2. Redistributions in binary form must reproduce the above copyright 1418334Speter * notice, this list of conditions and the following disclaimer in the 1518334Speter * documentation and/or other materials provided with the distribution. 1618334Speter * 3. Neither the name of the University nor the names of its contributors 1718334Speter * may be used to endorse or promote products derived from this software 1818334Speter * without specific prior written permission. 1918334Speter * 2018334Speter * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2118334Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2218334Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2318334Speter * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2418334Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2518334Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2618334Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2718334Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2818334Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2918334Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3018334Speter * SUCH DAMAGE. 3118334Speter * 3218334Speter * @(#)histedit.h 8.2 (Berkeley) 1/3/94 3318334Speter * $NetBSD: histedit.h,v 1.32 2007/06/10 20:20:28 christos Exp $ 3418334Speter * $FreeBSD: head/include/histedit.h 170547 2007-06-11 06:25:19Z stefanf $ 3518334Speter */ 3618334Speter 3718334Speter/* 3818334Speter * histedit.h: Line editor and history interface. 3918334Speter */ 4018334Speter#ifndef _HISTEDIT_H_ 4118334Speter#define _HISTEDIT_H_ 4218334Speter 4318334Speter#include <sys/types.h> 4418334Speter#include <stdio.h> 4518334Speter 4618334Speter__BEGIN_DECLS 4718334Speter 4818334Speter/* 4918334Speter * ==== Editing ==== 5018334Speter */ 5118334Speter 5218334Spetertypedef struct editline EditLine; 5318334Speter 5418334Speter/* 5518334Speter * For user-defined function interface 5618334Speter */ 5718334Spetertypedef struct lineinfo { 5818334Speter const char *buffer; 5918334Speter const char *cursor; 6018334Speter const char *lastchar; 6118334Speter} LineInfo; 6218334Speter 6318334Speter/* 6418334Speter * EditLine editor function return codes. 6518334Speter * For user-defined function interface 6618334Speter */ 6718334Speter#define CC_NORM 0 6818334Speter#define CC_NEWLINE 1 6918334Speter#define CC_EOF 2 7018334Speter#define CC_ARGHACK 3 7118334Speter#define CC_REFRESH 4 7218334Speter#define CC_CURSOR 5 7318334Speter#define CC_ERROR 6 7418334Speter#define CC_FATAL 7 7518334Speter#define CC_REDISPLAY 8 7618334Speter#define CC_REFRESH_BEEP 9 7718334Speter 7818334Speter/* 7918334Speter * Initialization, cleanup, and resetting 8018334Speter */ 8118334SpeterEditLine *el_init(const char *, FILE *, FILE *, FILE *); 8218334Spetervoid el_end(EditLine *); 8318334Spetervoid el_reset(EditLine *); 8418334Speter 8518334Speter/* 8618334Speter * Get a line, a character or push a string back in the input queue 8718334Speter */ 8818334Speterconst char *el_gets(EditLine *, int *); 8950397Sobrienint el_getc(EditLine *, char *); 9018334Spetervoid el_push(EditLine *, char *); 9118334Speter 9218334Speter/* 9318334Speter * Beep! 9418334Speter */ 9518334Spetervoid el_beep(EditLine *); 9618334Speter 9718334Speter/* 9818334Speter * High level function internals control 9918334Speter * Parses argc, argv array and executes builtin editline commands 10018334Speter */ 10118334Speterint el_parse(EditLine *, int, const char **); 10218334Speter 10318334Speter/* 10418334Speter * Low level editline access functions 10518334Speter */ 10618334Speterint el_set(EditLine *, int, ...); 10718334Speterint el_get(EditLine *, int, ...); 10818334Speter#if 0 10918334Speterunsigned char _el_fn_complete(EditLine *, int); 11018334Speter#endif 11118334Speter 11218334Speter/* 11318334Speter * el_set/el_get parameters 11418334Speter */ 11518334Speter#define EL_PROMPT 0 /* , el_pfunc_t); */ 11618334Speter#define EL_TERMINAL 1 /* , const char *); */ 11718334Speter#define EL_EDITOR 2 /* , const char *); */ 11818334Speter#define EL_SIGNAL 3 /* , int); */ 11918334Speter#define EL_BIND 4 /* , const char *, ..., NULL); */ 12018334Speter#define EL_TELLTC 5 /* , const char *, ..., NULL); */ 12118334Speter#define EL_SETTC 6 /* , const char *, ..., NULL); */ 12218334Speter#define EL_ECHOTC 7 /* , const char *, ..., NULL); */ 12318334Speter#define EL_SETTY 8 /* , const char *, ..., NULL); */ 12418334Speter#define EL_ADDFN 9 /* , const char *, const char * */ 12518334Speter /* , el_func_t); */ 12618334Speter#define EL_HIST 10 /* , hist_fun_t, const char *); */ 12718334Speter#define EL_EDITMODE 11 /* , int); */ 12818334Speter#define EL_RPROMPT 12 /* , el_pfunc_t); */ 12918334Speter#define EL_GETCFN 13 /* , el_rfunc_t); */ 13018334Speter#define EL_CLIENTDATA 14 /* , void *); */ 13118334Speter#define EL_UNBUFFERED 15 /* , int); */ 13218334Speter#define EL_PREP_TERM 16 /* , int); */ 13318334Speter#define EL_GETTC 17 /* , const char *, ..., NULL); */ 13418334Speter#define EL_GETFP 18 /* , int, FILE **) */ 13518334Speter#define EL_SETFP 19 /* , int, FILE *) */ 13618334Speter 13718334Speter#define EL_BUILTIN_GETCFN (NULL) 13818334Speter 13918334Speter/* 14018334Speter * Source named file or $PWD/.editrc or $HOME/.editrc 14118334Speter */ 14218334Speterint el_source(EditLine *, const char *); 14318334Speter 14418334Speter/* 14518334Speter * Must be called when the terminal changes size; If EL_SIGNAL 14618334Speter * is set this is done automatically otherwise it is the responsibility 14718334Speter * of the application 14818334Speter */ 14918334Spetervoid el_resize(EditLine *); 15018334Speter 15118334Speter 15218334Speter/* 15318334Speter * Set user private data. 15418334Speter */ 15518334Spetervoid el_data_set __P((EditLine *, void *)); 15618334Spetervoid * el_data_get __P((EditLine *)); 15718334Speter 15818334Speter/* 15918334Speter * User-defined function interface. 16018334Speter */ 16118334Speterconst LineInfo *el_line(EditLine *); 16218334Speterint el_insertstr(EditLine *, const char *); 16318334Spetervoid el_deletestr(EditLine *, int); 16418334Speter 16518334Speter 16618334Speter/* 16718334Speter * ==== History ==== 16818334Speter */ 16918334Speter 17018334Spetertypedef struct history History; 17118334Speter 17218334Spetertypedef struct HistEvent { 17318334Speter int num; 17418334Speter const char *str; 17518334Speter} HistEvent; 17618334Speter 17718334Speter/* 17818334Speter * History access functions. 17918334Speter */ 18018334SpeterHistory * history_init(void); 18118334Spetervoid history_end(History *); 18218334Speter 18318334Speterint history(History *, HistEvent *, int, ...); 18418334Speter 18518334Speter#define H_FUNC 0 /* , UTSL */ 18618334Speter#define H_SETSIZE 1 /* , const int); */ 18718334Speter#define H_EVENT 1 /* , const int); */ 18818334Speter#define H_GETSIZE 2 /* , void); */ 18918334Speter#define H_FIRST 3 /* , void); */ 19018334Speter#define H_LAST 4 /* , void); */ 19118334Speter#define H_PREV 5 /* , void); */ 19218334Speter#define H_NEXT 6 /* , void); */ 19318334Speter#define H_CURR 8 /* , const int); */ 19418334Speter#define H_SET 7 /* , int); */ 19518334Speter#define H_ADD 9 /* , const char *); */ 19618334Speter#define H_ENTER 10 /* , const char *); */ 19718334Speter#define H_APPEND 11 /* , const char *); */ 19818334Speter#define H_END 12 /* , void); */ 19918334Speter#define H_NEXT_STR 13 /* , const char *); */ 20018334Speter#define H_PREV_STR 14 /* , const char *); */ 20118334Speter#define H_NEXT_EVENT 15 /* , const int); */ 20218334Speter#define H_PREV_EVENT 16 /* , const int); */ 20318334Speter#define H_LOAD 17 /* , const char *); */ 20418334Speter#define H_SAVE 18 /* , const char *); */ 20518334Speter#define H_CLEAR 19 /* , void); */ 20618334Speter#define H_SETUNIQUE 20 /* , int); */ 20718334Speter#define H_GETUNIQUE 21 /* , void); */ 20818334Speter#define H_DEL 22 /* , int); */ 20918334Speter 21018334Speter 21118334Speter/* 21218334Speter * ==== Tokenization ==== 21318334Speter */ 21418334Speter 21518334Spetertypedef struct tokenizer Tokenizer; 21618334Speter 21718334Speter/* 21818334Speter * String tokenization functions, using simplified sh(1) quoting rules 21918334Speter */ 22018334SpeterTokenizer *tok_init(const char *); 22118334Spetervoid tok_end(Tokenizer *); 22218334Spetervoid tok_reset(Tokenizer *); 22318334Speterint tok_line(Tokenizer *, const LineInfo *, 22418334Speter int *, const char ***, int *, int *); 22518334Speterint tok_str(Tokenizer *, const char *, 22618334Speter int *, const char ***); 22718334Speter 22818334Speter__END_DECLS 22918334Speter 23018334Speter#endif /* _HISTEDIT_H_ */ 23118334Speter