123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- .\" $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.
|