mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			647 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
		
		
			
		
	
	
			647 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| 
								 | 
							
								.\"	$NetBSD: editline.3,v 1.25 2002/01/15 02:46:22 wiz Exp $
							 | 
						||
| 
								 | 
							
								.\"
							 | 
						||
| 
								 | 
							
								.\" Copyright (c) 1997-1999 The NetBSD Foundation, Inc.
							 | 
						||
| 
								 | 
							
								.\" All rights reserved.
							 | 
						||
| 
								 | 
							
								.\"
							 | 
						||
| 
								 | 
							
								.\" This file was contributed to The NetBSD Foundation by Luke Mewburn.
							 | 
						||
| 
								 | 
							
								.\"
							 | 
						||
| 
								 | 
							
								.\" Redistribution and use in source and binary forms, with or without
							 | 
						||
| 
								 | 
							
								.\" modification, are permitted provided that the following conditions
							 | 
						||
| 
								 | 
							
								.\" are met:
							 | 
						||
| 
								 | 
							
								.\" 1. Redistributions of source code must retain the above copyright
							 | 
						||
| 
								 | 
							
								.\"    notice, this list of conditions and the following disclaimer.
							 | 
						||
| 
								 | 
							
								.\" 2. Redistributions in binary form must reproduce the above copyright
							 | 
						||
| 
								 | 
							
								.\"    notice, this list of conditions and the following disclaimer in the
							 | 
						||
| 
								 | 
							
								.\"    documentation and/or other materials provided with the distribution.
							 | 
						||
| 
								 | 
							
								.\" 3. All advertising materials mentioning features or use of this software
							 | 
						||
| 
								 | 
							
								.\"    must display the following acknowledgement:
							 | 
						||
| 
								 | 
							
								.\"        This product includes software developed by the NetBSD
							 | 
						||
| 
								 | 
							
								.\"        Foundation, Inc. and its contributors.
							 | 
						||
| 
								 | 
							
								.\" 4. Neither the name of The NetBSD Foundation nor the names of its
							 | 
						||
| 
								 | 
							
								.\"    contributors may be used to endorse or promote products derived
							 | 
						||
| 
								 | 
							
								.\"    from this software without specific prior written permission.
							 | 
						||
| 
								 | 
							
								.\"
							 | 
						||
| 
								 | 
							
								.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
							 | 
						||
| 
								 | 
							
								.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
							 | 
						||
| 
								 | 
							
								.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
							 | 
						||
| 
								 | 
							
								.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
							 | 
						||
| 
								 | 
							
								.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
							 | 
						||
| 
								 | 
							
								.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
							 | 
						||
| 
								 | 
							
								.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
							 | 
						||
| 
								 | 
							
								.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
							 | 
						||
| 
								 | 
							
								.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
							 | 
						||
| 
								 | 
							
								.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
							 | 
						||
| 
								 | 
							
								.\" POSSIBILITY OF SUCH DAMAGE.
							 | 
						||
| 
								 | 
							
								.\"
							 | 
						||
| 
								 | 
							
								.Dd November 12, 1999
							 | 
						||
| 
								 | 
							
								.Os
							 | 
						||
| 
								 | 
							
								.Dt EDITLINE 3
							 | 
						||
| 
								 | 
							
								.Sh NAME
							 | 
						||
| 
								 | 
							
								.Nm editline ,
							 | 
						||
| 
								 | 
							
								.Nm el_init ,
							 | 
						||
| 
								 | 
							
								.Nm el_end ,
							 | 
						||
| 
								 | 
							
								.Nm el_reset ,
							 | 
						||
| 
								 | 
							
								.Nm el_gets ,
							 | 
						||
| 
								 | 
							
								.Nm el_getc ,
							 | 
						||
| 
								 | 
							
								.Nm el_push ,
							 | 
						||
| 
								 | 
							
								.Nm el_parse ,
							 | 
						||
| 
								 | 
							
								.Nm el_set ,
							 | 
						||
| 
								 | 
							
								.Nm el_source ,
							 | 
						||
| 
								 | 
							
								.Nm el_resize ,
							 | 
						||
| 
								 | 
							
								.Nm el_line ,
							 | 
						||
| 
								 | 
							
								.Nm el_insertstr ,
							 | 
						||
| 
								 | 
							
								.Nm el_deletestr ,
							 | 
						||
| 
								 | 
							
								.Nm history_init ,
							 | 
						||
| 
								 | 
							
								.Nm history_end ,
							 | 
						||
| 
								 | 
							
								.Nm history
							 | 
						||
| 
								 | 
							
								.Nd line editor and history functions
							 | 
						||
| 
								 | 
							
								.Sh LIBRARY
							 | 
						||
| 
								 | 
							
								.Lb libedit
							 | 
						||
| 
								 | 
							
								.Sh SYNOPSIS
							 | 
						||
| 
								 | 
							
								.Fd #include <histedit.h>
							 | 
						||
| 
								 | 
							
								.Ft EditLine *
							 | 
						||
| 
								 | 
							
								.Fn el_init "const char *prog" "FILE *fin" "FILE *fout" "FILE *ferr"
							 | 
						||
| 
								 | 
							
								.Ft void
							 | 
						||
| 
								 | 
							
								.Fn el_end "EditLine *e"
							 | 
						||
| 
								 | 
							
								.Ft void
							 | 
						||
| 
								 | 
							
								.Fn el_reset "EditLine *e"
							 | 
						||
| 
								 | 
							
								.Ft const char *
							 | 
						||
| 
								 | 
							
								.Fn el_gets "EditLine *e" "int *count"
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn el_getc "EditLine *e" "char *ch"
							 | 
						||
| 
								 | 
							
								.Ft void
							 | 
						||
| 
								 | 
							
								.Fn el_push "EditLine *e" "const char *str"
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn el_parse "EditLine *e" "int argc" "char *argv[]"
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn el_set "EditLine *e" "int op" "..."
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn el_get "EditLine *e" "int op" "void *result"
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn el_source "EditLine *e" "const char *file"
							 | 
						||
| 
								 | 
							
								.Ft void
							 | 
						||
| 
								 | 
							
								.Fn el_resize "EditLine *e"
							 | 
						||
| 
								 | 
							
								.Ft const LineInfo *
							 | 
						||
| 
								 | 
							
								.Fn el_line "EditLine *e"
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn el_insertstr "EditLine *e" "const char *str"
							 | 
						||
| 
								 | 
							
								.Ft void
							 | 
						||
| 
								 | 
							
								.Fn el_deletestr "EditLine *e" "int count"
							 | 
						||
| 
								 | 
							
								.Ft History *
							 | 
						||
| 
								 | 
							
								.Fn history_init
							 | 
						||
| 
								 | 
							
								.Ft void
							 | 
						||
| 
								 | 
							
								.Fn history_end "History *h"
							 | 
						||
| 
								 | 
							
								.Ft int
							 | 
						||
| 
								 | 
							
								.Fn history "History *h" "HistEvent *ev" "int op" "..."
							 | 
						||
| 
								 | 
							
								.Sh DESCRIPTION
							 | 
						||
| 
								 | 
							
								The
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								library provides generic line editing and history functions,
							 | 
						||
| 
								 | 
							
								similar to those found in
							 | 
						||
| 
								 | 
							
								.Xr sh 1 .
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								These functions are available in the
							 | 
						||
| 
								 | 
							
								.Nm libedit
							 | 
						||
| 
								 | 
							
								library (which needs the
							 | 
						||
| 
								 | 
							
								.Nm libtermcap
							 | 
						||
| 
								 | 
							
								library).
							 | 
						||
| 
								 | 
							
								Programs should be linked with
							 | 
						||
| 
								 | 
							
								.Fl ledit ltermcap .
							 | 
						||
| 
								 | 
							
								.Sh LINE EDITING FUNCTIONS
							 | 
						||
| 
								 | 
							
								The line editing functions use a common data structure,
							 | 
						||
| 
								 | 
							
								.Fa EditLine ,
							 | 
						||
| 
								 | 
							
								which is created by
							 | 
						||
| 
								 | 
							
								.Fn el_init
							 | 
						||
| 
								 | 
							
								and freed by
							 | 
						||
| 
								 | 
							
								.Fn el_end .
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								The following functions are available:
							 | 
						||
| 
								 | 
							
								.Bl -tag -width 4n
							 | 
						||
| 
								 | 
							
								.It Fn el_init
							 | 
						||
| 
								 | 
							
								Initialise the line editor, and return a data structure
							 | 
						||
| 
								 | 
							
								to be used by all other line editing functions.
							 | 
						||
| 
								 | 
							
								.Fa prog
							 | 
						||
| 
								 | 
							
								is the name of the invoking program, used when reading the
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								file to determine which settings to use.
							 | 
						||
| 
								 | 
							
								.Fa fin ,
							 | 
						||
| 
								 | 
							
								.Fa fout
							 | 
						||
| 
								 | 
							
								and
							 | 
						||
| 
								 | 
							
								.Fa ferr
							 | 
						||
| 
								 | 
							
								are the input, output, and error streams (respectively) to use.
							 | 
						||
| 
								 | 
							
								In this documentation, references to
							 | 
						||
| 
								 | 
							
								.Dq the tty
							 | 
						||
| 
								 | 
							
								are actually to this input/output stream combination.
							 | 
						||
| 
								 | 
							
								.It Fn el_end
							 | 
						||
| 
								 | 
							
								Clean up and finish with
							 | 
						||
| 
								 | 
							
								.Fa e ,
							 | 
						||
| 
								 | 
							
								assumed to have been created with
							 | 
						||
| 
								 | 
							
								.Fn el_init .
							 | 
						||
| 
								 | 
							
								.It Fn el_reset
							 | 
						||
| 
								 | 
							
								Reset the tty and the parser.
							 | 
						||
| 
								 | 
							
								This should be called after an error which may have upset the tty's
							 | 
						||
| 
								 | 
							
								state.
							 | 
						||
| 
								 | 
							
								.It Fn el_gets
							 | 
						||
| 
								 | 
							
								Read a line from the tty.
							 | 
						||
| 
								 | 
							
								.Fa count
							 | 
						||
| 
								 | 
							
								is modified to contain the number of characters read.
							 | 
						||
| 
								 | 
							
								Returns the line read if successful, or
							 | 
						||
| 
								 | 
							
								.Dv NULL
							 | 
						||
| 
								 | 
							
								if no characters were read or if an error occurred.
							 | 
						||
| 
								 | 
							
								.It Fn el_getc
							 | 
						||
| 
								 | 
							
								Read a character from the tty.
							 | 
						||
| 
								 | 
							
								.Fa ch
							 | 
						||
| 
								 | 
							
								is modified to contain the character read.
							 | 
						||
| 
								 | 
							
								Returns the number of characters read if successful, -1 otherwise.
							 | 
						||
| 
								 | 
							
								.It Fn el_push
							 | 
						||
| 
								 | 
							
								Pushes
							 | 
						||
| 
								 | 
							
								.Fa str
							 | 
						||
| 
								 | 
							
								back onto the input stream.
							 | 
						||
| 
								 | 
							
								This is used by the macro expansion mechanism.
							 | 
						||
| 
								 | 
							
								Refer to the description of
							 | 
						||
| 
								 | 
							
								.Ic bind
							 | 
						||
| 
								 | 
							
								.Fl s
							 | 
						||
| 
								 | 
							
								in
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Fn el_parse
							 | 
						||
| 
								 | 
							
								Parses the
							 | 
						||
| 
								 | 
							
								.Fa argv
							 | 
						||
| 
								 | 
							
								array (which is
							 | 
						||
| 
								 | 
							
								.Fa argc
							 | 
						||
| 
								 | 
							
								elements in size)
							 | 
						||
| 
								 | 
							
								to execute builtin
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								commands.
							 | 
						||
| 
								 | 
							
								If the command is prefixed with
							 | 
						||
| 
								 | 
							
								.Dq prog :
							 | 
						||
| 
								 | 
							
								then
							 | 
						||
| 
								 | 
							
								.Fn el_parse
							 | 
						||
| 
								 | 
							
								will only execute the command if
							 | 
						||
| 
								 | 
							
								.Dq prog
							 | 
						||
| 
								 | 
							
								matches the
							 | 
						||
| 
								 | 
							
								.Fa prog
							 | 
						||
| 
								 | 
							
								argument supplied to
							 | 
						||
| 
								 | 
							
								.Fn el_init .
							 | 
						||
| 
								 | 
							
								The return value is
							 | 
						||
| 
								 | 
							
								-1 if the command is unknown,
							 | 
						||
| 
								 | 
							
								0 if there was no error or
							 | 
						||
| 
								 | 
							
								.Dq prog
							 | 
						||
| 
								 | 
							
								didn't match, or
							 | 
						||
| 
								 | 
							
								1 if the command returned an error.
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Fn el_set
							 | 
						||
| 
								 | 
							
								Set
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								parameters.
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								determines which parameter to set, and each operation has its
							 | 
						||
| 
								 | 
							
								own parameter list.
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								The following values for
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								are supported, along with the required argument list:
							 | 
						||
| 
								 | 
							
								.Bl -tag -width 4n
							 | 
						||
| 
								 | 
							
								.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)"
							 | 
						||
| 
								 | 
							
								Define prompt printing function as
							 | 
						||
| 
								 | 
							
								.Fa f ,
							 | 
						||
| 
								 | 
							
								which is to return a string that contains the prompt.
							 | 
						||
| 
								 | 
							
								.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)"
							 | 
						||
| 
								 | 
							
								Define right side prompt printing function as
							 | 
						||
| 
								 | 
							
								.Fa f ,
							 | 
						||
| 
								 | 
							
								which is to return a string that contains the prompt.
							 | 
						||
| 
								 | 
							
								.It Dv EL_TERMINAL , Fa "const char *type"
							 | 
						||
| 
								 | 
							
								Define terminal type of the tty to be
							 | 
						||
| 
								 | 
							
								.Fa type ,
							 | 
						||
| 
								 | 
							
								or to
							 | 
						||
| 
								 | 
							
								.Ev TERM
							 | 
						||
| 
								 | 
							
								if
							 | 
						||
| 
								 | 
							
								.Fa type
							 | 
						||
| 
								 | 
							
								is
							 | 
						||
| 
								 | 
							
								.Dv NULL .
							 | 
						||
| 
								 | 
							
								.It Dv EL_EDITOR , Fa "const char *mode"
							 | 
						||
| 
								 | 
							
								Set editing mode to
							 | 
						||
| 
								 | 
							
								.Fa mode ,
							 | 
						||
| 
								 | 
							
								which must be one of
							 | 
						||
| 
								 | 
							
								.Dq emacs
							 | 
						||
| 
								 | 
							
								or
							 | 
						||
| 
								 | 
							
								.Dq vi .
							 | 
						||
| 
								 | 
							
								.It Dv EL_SIGNAL , Fa "int flag"
							 | 
						||
| 
								 | 
							
								If
							 | 
						||
| 
								 | 
							
								.Fa flag
							 | 
						||
| 
								 | 
							
								is non-zero,
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								will install its own signal handler for the following signals when
							 | 
						||
| 
								 | 
							
								reading command input:
							 | 
						||
| 
								 | 
							
								.Dv SIGCONT ,
							 | 
						||
| 
								 | 
							
								.Dv SIGHUP ,
							 | 
						||
| 
								 | 
							
								.Dv SIGINT ,
							 | 
						||
| 
								 | 
							
								.Dv SIGQUIT ,
							 | 
						||
| 
								 | 
							
								.Dv SIGSTOP ,
							 | 
						||
| 
								 | 
							
								.Dv SIGTERM ,
							 | 
						||
| 
								 | 
							
								.Dv SIGTSTP ,
							 | 
						||
| 
								 | 
							
								and
							 | 
						||
| 
								 | 
							
								.Dv SIGWINCH .
							 | 
						||
| 
								 | 
							
								Otherwise, the current signal handlers will be used.
							 | 
						||
| 
								 | 
							
								.It Dv EL_BIND , Xo
							 | 
						||
| 
								 | 
							
								.Fa "const char *" ,
							 | 
						||
| 
								 | 
							
								.Fa "..." ,
							 | 
						||
| 
								 | 
							
								.Dv NULL
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Perform the
							 | 
						||
| 
								 | 
							
								.Ic bind
							 | 
						||
| 
								 | 
							
								builtin command.
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Dv EL_ECHOTC , Xo
							 | 
						||
| 
								 | 
							
								.Fa "const char *" ,
							 | 
						||
| 
								 | 
							
								.Fa "..." ,
							 | 
						||
| 
								 | 
							
								.Dv NULL
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Perform the
							 | 
						||
| 
								 | 
							
								.Ic echotc
							 | 
						||
| 
								 | 
							
								builtin command.
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Dv EL_SETTC , Xo
							 | 
						||
| 
								 | 
							
								.Fa "const char *" ,
							 | 
						||
| 
								 | 
							
								.Fa "..." ,
							 | 
						||
| 
								 | 
							
								.Dv NULL
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Perform the
							 | 
						||
| 
								 | 
							
								.Ic settc
							 | 
						||
| 
								 | 
							
								builtin command.
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Dv EL_SETTY , Xo
							 | 
						||
| 
								 | 
							
								.Fa "const char *" ,
							 | 
						||
| 
								 | 
							
								.Fa "..." ,
							 | 
						||
| 
								 | 
							
								.Dv NULL
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Perform the
							 | 
						||
| 
								 | 
							
								.Ic setty
							 | 
						||
| 
								 | 
							
								builtin command.
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Dv EL_TELLTC , Xo
							 | 
						||
| 
								 | 
							
								.Fa "const char *" ,
							 | 
						||
| 
								 | 
							
								.Fa "..." ,
							 | 
						||
| 
								 | 
							
								.Dv NULL
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Perform the
							 | 
						||
| 
								 | 
							
								.Ic telltc
							 | 
						||
| 
								 | 
							
								builtin command.
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for more information.
							 | 
						||
| 
								 | 
							
								.It Dv EL_ADDFN , Xo
							 | 
						||
| 
								 | 
							
								.Fa "const char *name" ,
							 | 
						||
| 
								 | 
							
								.Fa "const char *help" ,
							 | 
						||
| 
								 | 
							
								.Fa "unsigned char (*func)(EditLine *e, int ch)
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Add a user defined function,
							 | 
						||
| 
								 | 
							
								.Fn func ,
							 | 
						||
| 
								 | 
							
								referred to as
							 | 
						||
| 
								 | 
							
								.Fa name
							 | 
						||
| 
								 | 
							
								which is invoked when a key which is bound to
							 | 
						||
| 
								 | 
							
								.Fa name
							 | 
						||
| 
								 | 
							
								is entered.
							 | 
						||
| 
								 | 
							
								.Fa help
							 | 
						||
| 
								 | 
							
								is a description of
							 | 
						||
| 
								 | 
							
								.Fa name .
							 | 
						||
| 
								 | 
							
								At invocation time,
							 | 
						||
| 
								 | 
							
								.Fa ch
							 | 
						||
| 
								 | 
							
								is the key which caused the invocation.
							 | 
						||
| 
								 | 
							
								The return value of
							 | 
						||
| 
								 | 
							
								.Fn func
							 | 
						||
| 
								 | 
							
								should be one of:
							 | 
						||
| 
								 | 
							
								.Bl -tag -width "CC_REDISPLAY"
							 | 
						||
| 
								 | 
							
								.It Dv CC_NORM
							 | 
						||
| 
								 | 
							
								Add a normal character.
							 | 
						||
| 
								 | 
							
								.It Dv CC_NEWLINE
							 | 
						||
| 
								 | 
							
								End of line was entered.
							 | 
						||
| 
								 | 
							
								.It Dv CC_EOF
							 | 
						||
| 
								 | 
							
								EOF was entered.
							 | 
						||
| 
								 | 
							
								.It Dv CC_ARGHACK
							 | 
						||
| 
								 | 
							
								Expecting further command input as arguments, do nothing visually.
							 | 
						||
| 
								 | 
							
								.It Dv CC_REFRESH
							 | 
						||
| 
								 | 
							
								Refresh display.
							 | 
						||
| 
								 | 
							
								.It Dv CC_REFRESH_BEEP
							 | 
						||
| 
								 | 
							
								Refresh display, and beep.
							 | 
						||
| 
								 | 
							
								.It Dv CC_CURSOR
							 | 
						||
| 
								 | 
							
								Cursor moved, so update and perform
							 | 
						||
| 
								 | 
							
								.Dv CC_REFRESH .
							 | 
						||
| 
								 | 
							
								.It Dv CC_REDISPLAY
							 | 
						||
| 
								 | 
							
								Redisplay entire input line.
							 | 
						||
| 
								 | 
							
								This is useful if a key binding outputs extra information.
							 | 
						||
| 
								 | 
							
								.It Dv CC_ERROR
							 | 
						||
| 
								 | 
							
								An error occurred.
							 | 
						||
| 
								 | 
							
								Beep, and flush tty.
							 | 
						||
| 
								 | 
							
								.It Dv CC_FATAL
							 | 
						||
| 
								 | 
							
								Fatal error, reset tty to known state.
							 | 
						||
| 
								 | 
							
								.El
							 | 
						||
| 
								 | 
							
								.It Dv EL_HIST , Xo
							 | 
						||
| 
								 | 
							
								.Fa "History *(*func)(History *, int op, ...)" ,
							 | 
						||
| 
								 | 
							
								.Fa "const char *ptr"
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Defines which history function to use, which is usually
							 | 
						||
| 
								 | 
							
								.Fn history .
							 | 
						||
| 
								 | 
							
								.Fa ptr
							 | 
						||
| 
								 | 
							
								should be the value returned by
							 | 
						||
| 
								 | 
							
								.Fn history_init .
							 | 
						||
| 
								 | 
							
								.It Dv EL_EDITMODE , Fa "int flag"
							 | 
						||
| 
								 | 
							
								If
							 | 
						||
| 
								 | 
							
								.Fa flag
							 | 
						||
| 
								 | 
							
								is non-zero,
							 | 
						||
| 
								 | 
							
								editing is enabled (the default).
							 | 
						||
| 
								 | 
							
								Note that this is only an indication, and does not
							 | 
						||
| 
								 | 
							
								affect the operation of
							 | 
						||
| 
								 | 
							
								.Nm "" .
							 | 
						||
| 
								 | 
							
								At this time, it is the caller's responsibility to
							 | 
						||
| 
								 | 
							
								check this
							 | 
						||
| 
								 | 
							
								(using
							 | 
						||
| 
								 | 
							
								.Fn el_get )
							 | 
						||
| 
								 | 
							
								to determine if editing should be enabled or not.
							 | 
						||
| 
								 | 
							
								.It Dv EL_GETCFN , Fa "int (*f)(EditLine *, char *c)"
							 | 
						||
| 
								 | 
							
								Define the character reading function as
							 | 
						||
| 
								 | 
							
								.Fa f ,
							 | 
						||
| 
								 | 
							
								which is to return the number of characters read and store them in
							 | 
						||
| 
								 | 
							
								.Fa c .
							 | 
						||
| 
								 | 
							
								This function is called internally by
							 | 
						||
| 
								 | 
							
								.Fn el_gets
							 | 
						||
| 
								 | 
							
								and
							 | 
						||
| 
								 | 
							
								.Fn el_getc .
							 | 
						||
| 
								 | 
							
								The builtin function can be set or restored with the special function
							 | 
						||
| 
								 | 
							
								name ``EL_BUILTIN_GETCFN''.
							 | 
						||
| 
								 | 
							
								.It Dv EL_CLIENTDATA , Fa "void *data"
							 | 
						||
| 
								 | 
							
								Register
							 | 
						||
| 
								 | 
							
								.Fa data
							 | 
						||
| 
								 | 
							
								to be associated with this EditLine structure. It can be retrieved with
							 | 
						||
| 
								 | 
							
								the corresponding
							 | 
						||
| 
								 | 
							
								.Fn el_get
							 | 
						||
| 
								 | 
							
								call.
							 | 
						||
| 
								 | 
							
								.El
							 | 
						||
| 
								 | 
							
								.It Fn el_get
							 | 
						||
| 
								 | 
							
								Get
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								parameters.
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								determines which parameter to retrieve into
							 | 
						||
| 
								 | 
							
								.Fa result .
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								The following values for
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								are supported, along with actual type of
							 | 
						||
| 
								 | 
							
								.Fa result :
							 | 
						||
| 
								 | 
							
								.Bl -tag -width 4n
							 | 
						||
| 
								 | 
							
								.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)"
							 | 
						||
| 
								 | 
							
								Return a pointer to the function that displays the prompt.
							 | 
						||
| 
								 | 
							
								.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)"
							 | 
						||
| 
								 | 
							
								Return a pointer to the function that displays the rightside prompt.
							 | 
						||
| 
								 | 
							
								.It Dv EL_EDITOR , Fa "const char *"
							 | 
						||
| 
								 | 
							
								Return the name of the editor, which will be one of
							 | 
						||
| 
								 | 
							
								.Dq emacs
							 | 
						||
| 
								 | 
							
								or
							 | 
						||
| 
								 | 
							
								.Dq vi .
							 | 
						||
| 
								 | 
							
								.It Dv EL_SIGNAL , Fa "int *"
							 | 
						||
| 
								 | 
							
								Return non-zero if
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								has installed private signal handlers (see
							 | 
						||
| 
								 | 
							
								.Fn el_get
							 | 
						||
| 
								 | 
							
								above).
							 | 
						||
| 
								 | 
							
								.It Dv EL_EDITMODE, Fa "int *"
							 | 
						||
| 
								 | 
							
								Return non-zero if editing is enabled.
							 | 
						||
| 
								 | 
							
								.It Dv EL_GETCFN, Fa "int (**f)(EditLine *, char *)"
							 | 
						||
| 
								 | 
							
								Return a pointer to the function that read characters, which is equal to
							 | 
						||
| 
								 | 
							
								``EL_BUILTIN_GETCFN'' in the case of the default builtin function.
							 | 
						||
| 
								 | 
							
								.It Dv EL_CLIENTDATA , Fa "void **data"
							 | 
						||
| 
								 | 
							
								Retrieve
							 | 
						||
| 
								 | 
							
								.Fa data
							 | 
						||
| 
								 | 
							
								previously registered with the corresponding
							 | 
						||
| 
								 | 
							
								.Fn el_set
							 | 
						||
| 
								 | 
							
								call.
							 | 
						||
| 
								 | 
							
								.El
							 | 
						||
| 
								 | 
							
								.It Fn el_source
							 | 
						||
| 
								 | 
							
								Initialise
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								by reading the contents of
							 | 
						||
| 
								 | 
							
								.Fa file .
							 | 
						||
| 
								 | 
							
								.Fn el_parse
							 | 
						||
| 
								 | 
							
								is called for each line in
							 | 
						||
| 
								 | 
							
								.Fa file .
							 | 
						||
| 
								 | 
							
								If
							 | 
						||
| 
								 | 
							
								.Fa file
							 | 
						||
| 
								 | 
							
								is
							 | 
						||
| 
								 | 
							
								.Dv NULL ,
							 | 
						||
| 
								 | 
							
								try
							 | 
						||
| 
								 | 
							
								.Pa $PWD/.editrc
							 | 
						||
| 
								 | 
							
								then
							 | 
						||
| 
								 | 
							
								.Pa $HOME/.editrc .
							 | 
						||
| 
								 | 
							
								Refer to
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								for details on the format of
							 | 
						||
| 
								 | 
							
								.Fa file .
							 | 
						||
| 
								 | 
							
								.It Fn el_resize
							 | 
						||
| 
								 | 
							
								Must be called if the terminal size changes.
							 | 
						||
| 
								 | 
							
								If
							 | 
						||
| 
								 | 
							
								.Dv EL_SIGNAL
							 | 
						||
| 
								 | 
							
								has been set with
							 | 
						||
| 
								 | 
							
								.Fn el_set ,
							 | 
						||
| 
								 | 
							
								then this is done automatically.
							 | 
						||
| 
								 | 
							
								Otherwise, it's the responsibility of the application to call
							 | 
						||
| 
								 | 
							
								.Fn el_resize
							 | 
						||
| 
								 | 
							
								on the appropriate occasions.
							 | 
						||
| 
								 | 
							
								.It Fn el_line
							 | 
						||
| 
								 | 
							
								Return the editing information for the current line in a
							 | 
						||
| 
								 | 
							
								.Fa LineInfo
							 | 
						||
| 
								 | 
							
								structure, which is defined as follows:
							 | 
						||
| 
								 | 
							
								.Bd -literal
							 | 
						||
| 
								 | 
							
								typedef struct lineinfo {
							 | 
						||
| 
								 | 
							
								    const char *buffer;    /* address of buffer */
							 | 
						||
| 
								 | 
							
								    const char *cursor;    /* address of cursor */
							 | 
						||
| 
								 | 
							
								    const char *lastchar;  /* address of last character */
							 | 
						||
| 
								 | 
							
								} LineInfo;
							 | 
						||
| 
								 | 
							
								.Ed
							 | 
						||
| 
								 | 
							
								.It Fn el_insertstr
							 | 
						||
| 
								 | 
							
								Insert
							 | 
						||
| 
								 | 
							
								.Fa str
							 | 
						||
| 
								 | 
							
								into the line at the cursor.
							 | 
						||
| 
								 | 
							
								Returns -1 if
							 | 
						||
| 
								 | 
							
								.Fa str
							 | 
						||
| 
								 | 
							
								is empty or won't fit, and 0 otherwise.
							 | 
						||
| 
								 | 
							
								.It Fn el_deletestr
							 | 
						||
| 
								 | 
							
								Delete
							 | 
						||
| 
								 | 
							
								.Fa num
							 | 
						||
| 
								 | 
							
								characters before the cursor.
							 | 
						||
| 
								 | 
							
								.El
							 | 
						||
| 
								 | 
							
								.Sh HISTORY LIST FUNCTIONS
							 | 
						||
| 
								 | 
							
								The history functions use a common data structure,
							 | 
						||
| 
								 | 
							
								.Fa History ,
							 | 
						||
| 
								 | 
							
								which is created by
							 | 
						||
| 
								 | 
							
								.Fn history_init
							 | 
						||
| 
								 | 
							
								and freed by
							 | 
						||
| 
								 | 
							
								.Fn history_end .
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								The following functions are available:
							 | 
						||
| 
								 | 
							
								.Bl -tag -width 4n
							 | 
						||
| 
								 | 
							
								.It Fn history_init
							 | 
						||
| 
								 | 
							
								Initialise the history list, and return a data structure
							 | 
						||
| 
								 | 
							
								to be used by all other history list functions.
							 | 
						||
| 
								 | 
							
								.It Fn history_end
							 | 
						||
| 
								 | 
							
								Clean up and finish with
							 | 
						||
| 
								 | 
							
								.Fa h ,
							 | 
						||
| 
								 | 
							
								assumed to have been created with
							 | 
						||
| 
								 | 
							
								.Fn history_init .
							 | 
						||
| 
								 | 
							
								.It Fn history
							 | 
						||
| 
								 | 
							
								Perform operation
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								on the history list, with optional arguments as needed by the
							 | 
						||
| 
								 | 
							
								operation.
							 | 
						||
| 
								 | 
							
								.Fa ev
							 | 
						||
| 
								 | 
							
								is changed accordingly to operation.
							 | 
						||
| 
								 | 
							
								The following values for
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								are supported, along with the required argument list:
							 | 
						||
| 
								 | 
							
								.Bl -tag -width 4n
							 | 
						||
| 
								 | 
							
								.It Dv H_SETSIZE , Fa "int size"
							 | 
						||
| 
								 | 
							
								Set size of history to
							 | 
						||
| 
								 | 
							
								.Fa size
							 | 
						||
| 
								 | 
							
								elements.
							 | 
						||
| 
								 | 
							
								.It Dv H_GETSIZE
							 | 
						||
| 
								 | 
							
								Get number of events currently in history.
							 | 
						||
| 
								 | 
							
								.It Dv H_END
							 | 
						||
| 
								 | 
							
								Cleans up and finishes with
							 | 
						||
| 
								 | 
							
								.Fa h ,
							 | 
						||
| 
								 | 
							
								assumed to be created with
							 | 
						||
| 
								 | 
							
								.Fn history_init .
							 | 
						||
| 
								 | 
							
								.It Dv H_CLEAR
							 | 
						||
| 
								 | 
							
								Clear the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_FUNC , Xo
							 | 
						||
| 
								 | 
							
								.Fa "void *ptr" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_gfun_t first" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_gfun_t next" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_gfun_t last" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_gfun_t prev" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_gfun_t curr" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_sfun_t set" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_vfun_t clear" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_efun_t enter" ,
							 | 
						||
| 
								 | 
							
								.Fa "history_efun_t add"
							 | 
						||
| 
								 | 
							
								.Xc
							 | 
						||
| 
								 | 
							
								Define functions to perform various history operations.
							 | 
						||
| 
								 | 
							
								.Fa ptr
							 | 
						||
| 
								 | 
							
								is the argument given to a function when it's invoked.
							 | 
						||
| 
								 | 
							
								.It Dv H_FIRST
							 | 
						||
| 
								 | 
							
								Return the first element in the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_LAST
							 | 
						||
| 
								 | 
							
								Return the last element in the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_PREV
							 | 
						||
| 
								 | 
							
								Return the previous element in the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_NEXT
							 | 
						||
| 
								 | 
							
								Return the next element in the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_CURR
							 | 
						||
| 
								 | 
							
								Return the current element in the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_SET
							 | 
						||
| 
								 | 
							
								Set the cursor to point to the requested element.
							 | 
						||
| 
								 | 
							
								.It Dv H_ADD , Fa "const char *str"
							 | 
						||
| 
								 | 
							
								Append
							 | 
						||
| 
								 | 
							
								.Fa str
							 | 
						||
| 
								 | 
							
								to the current element of the history, or create an element with
							 | 
						||
| 
								 | 
							
								.It Dv H_APPEND , Fa "const char *str"
							 | 
						||
| 
								 | 
							
								Append
							 | 
						||
| 
								 | 
							
								.Fa str
							 | 
						||
| 
								 | 
							
								to the last new element of the history.
							 | 
						||
| 
								 | 
							
								.It Dv H_ENTER , Fa "const char *str"
							 | 
						||
| 
								 | 
							
								Add
							 | 
						||
| 
								 | 
							
								.Fa str
							 | 
						||
| 
								 | 
							
								as a new element to the history, and, if necessary,
							 | 
						||
| 
								 | 
							
								removing the oldest entry to keep the list to the created size.
							 | 
						||
| 
								 | 
							
								.It Dv H_PREV_STR , Fa "const char *str"
							 | 
						||
| 
								 | 
							
								Return the closest previous event that starts with
							 | 
						||
| 
								 | 
							
								.Fa str .
							 | 
						||
| 
								 | 
							
								.It Dv H_NEXT_STR , Fa "const char *str"
							 | 
						||
| 
								 | 
							
								Return the closest next event that starts with
							 | 
						||
| 
								 | 
							
								.Fa str .
							 | 
						||
| 
								 | 
							
								.It Dv H_PREV_EVENT , Fa "int e"
							 | 
						||
| 
								 | 
							
								Return the previous event numbered
							 | 
						||
| 
								 | 
							
								.Fa e .
							 | 
						||
| 
								 | 
							
								.It Dv H_NEXT_EVENT , Fa "int e"
							 | 
						||
| 
								 | 
							
								Return the next event numbered
							 | 
						||
| 
								 | 
							
								.Fa e .
							 | 
						||
| 
								 | 
							
								.It Dv H_LOAD , Fa "const char *file"
							 | 
						||
| 
								 | 
							
								Load the history list stored in
							 | 
						||
| 
								 | 
							
								.Fa file .
							 | 
						||
| 
								 | 
							
								.It Dv H_SAVE , Fa "const char *file"
							 | 
						||
| 
								 | 
							
								Save the history list to
							 | 
						||
| 
								 | 
							
								.Fa file .
							 | 
						||
| 
								 | 
							
								.El
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								.Fn history
							 | 
						||
| 
								 | 
							
								returns 0 if the operation
							 | 
						||
| 
								 | 
							
								.Fa op
							 | 
						||
| 
								 | 
							
								succeeds. Otherwise, -1 is returned and
							 | 
						||
| 
								 | 
							
								.Fa ev
							 | 
						||
| 
								 | 
							
								is updated to contain more details about the error.
							 | 
						||
| 
								 | 
							
								.El
							 | 
						||
| 
								 | 
							
								.\"XXX.Sh EXAMPLES
							 | 
						||
| 
								 | 
							
								.\"XXX: provide some examples
							 | 
						||
| 
								 | 
							
								.Sh SEE ALSO
							 | 
						||
| 
								 | 
							
								.Xr sh 1 ,
							 | 
						||
| 
								 | 
							
								.Xr signal 3 ,
							 | 
						||
| 
								 | 
							
								.Xr termcap 3 ,
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								.Sh HISTORY
							 | 
						||
| 
								 | 
							
								The
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								library first appeared in
							 | 
						||
| 
								 | 
							
								.Bx 4.4 .
							 | 
						||
| 
								 | 
							
								.Dv CC_REDISPLAY
							 | 
						||
| 
								 | 
							
								appeared in
							 | 
						||
| 
								 | 
							
								.Nx 1.3 .
							 | 
						||
| 
								 | 
							
								.Dv CC_REFRESH_BEEP ,
							 | 
						||
| 
								 | 
							
								.Dv EL_EDITMODE
							 | 
						||
| 
								 | 
							
								and the readline emulation appeared in
							 | 
						||
| 
								 | 
							
								.Nx 1.4 .
							 | 
						||
| 
								 | 
							
								.Dv EL_RPROMPT
							 | 
						||
| 
								 | 
							
								appeared in
							 | 
						||
| 
								 | 
							
								.Nx 1.5 .
							 | 
						||
| 
								 | 
							
								.Sh AUTHORS
							 | 
						||
| 
								 | 
							
								The
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								library was written by Christos Zoulas.
							 | 
						||
| 
								 | 
							
								Luke Mewburn wrote this manual and implemented
							 | 
						||
| 
								 | 
							
								.Dv CC_REDISPLAY ,
							 | 
						||
| 
								 | 
							
								.Dv CC_REFRESH_BEEP ,
							 | 
						||
| 
								 | 
							
								.Dv EL_EDITMODE ,
							 | 
						||
| 
								 | 
							
								and
							 | 
						||
| 
								 | 
							
								.Dv EL_RPROMPT .
							 | 
						||
| 
								 | 
							
								Jaromir Dolecek implemented the readline emulation.
							 | 
						||
| 
								 | 
							
								.Sh BUGS
							 | 
						||
| 
								 | 
							
								The tokenization functions are not publicly defined in
							 | 
						||
| 
								 | 
							
								.Fd <histedit.h> .
							 | 
						||
| 
								 | 
							
								.Pp
							 | 
						||
| 
								 | 
							
								At this time, it is the responsibility of the caller to
							 | 
						||
| 
								 | 
							
								check the result of the
							 | 
						||
| 
								 | 
							
								.Dv EL_EDITMODE
							 | 
						||
| 
								 | 
							
								operation of
							 | 
						||
| 
								 | 
							
								.Fn el_get
							 | 
						||
| 
								 | 
							
								(after an
							 | 
						||
| 
								 | 
							
								.Fn el_source
							 | 
						||
| 
								 | 
							
								or
							 | 
						||
| 
								 | 
							
								.Fn el_parse )
							 | 
						||
| 
								 | 
							
								to determine if
							 | 
						||
| 
								 | 
							
								.Nm
							 | 
						||
| 
								 | 
							
								should be used for further input.
							 | 
						||
| 
								 | 
							
								I.e.,
							 | 
						||
| 
								 | 
							
								.Dv EL_EDITMODE
							 | 
						||
| 
								 | 
							
								is purely an indication of the result of the most recent
							 | 
						||
| 
								 | 
							
								.Xr editrc 5
							 | 
						||
| 
								 | 
							
								.Ic edit
							 | 
						||
| 
								 | 
							
								command.
							 |