xref: /freebsd/contrib/libedit/editline.3 (revision 91f764172e197c82efa97a66cfbc13d2c744b02b)
1*91f76417SBaptiste Daroussin.\"	$NetBSD: editline.3,v 1.101 2021/08/15 10:12:54 wiz Exp $
2d0ef721eSBaptiste Daroussin.\"
3d0ef721eSBaptiste Daroussin.\" Copyright (c) 1997-2014 The NetBSD Foundation, Inc.
4d0ef721eSBaptiste Daroussin.\" All rights reserved.
5d0ef721eSBaptiste Daroussin.\"
6d0ef721eSBaptiste Daroussin.\" This file was contributed to The NetBSD Foundation by Luke Mewburn.
7d0ef721eSBaptiste Daroussin.\"
8d0ef721eSBaptiste Daroussin.\" Redistribution and use in source and binary forms, with or without
9d0ef721eSBaptiste Daroussin.\" modification, are permitted provided that the following conditions
10d0ef721eSBaptiste Daroussin.\" are met:
11d0ef721eSBaptiste Daroussin.\" 1. Redistributions of source code must retain the above copyright
12d0ef721eSBaptiste Daroussin.\"    notice, this list of conditions and the following disclaimer.
13d0ef721eSBaptiste Daroussin.\" 2. Redistributions in binary form must reproduce the above copyright
14d0ef721eSBaptiste Daroussin.\"    notice, this list of conditions and the following disclaimer in the
15d0ef721eSBaptiste Daroussin.\"    documentation and/or other materials provided with the distribution.
16d0ef721eSBaptiste Daroussin.\"
17d0ef721eSBaptiste Daroussin.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
18d0ef721eSBaptiste Daroussin.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19d0ef721eSBaptiste Daroussin.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20d0ef721eSBaptiste Daroussin.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
21d0ef721eSBaptiste Daroussin.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22d0ef721eSBaptiste Daroussin.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23d0ef721eSBaptiste Daroussin.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24d0ef721eSBaptiste Daroussin.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25d0ef721eSBaptiste Daroussin.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26d0ef721eSBaptiste Daroussin.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27d0ef721eSBaptiste Daroussin.\" POSSIBILITY OF SUCH DAMAGE.
28d0ef721eSBaptiste Daroussin.\"
29*91f76417SBaptiste Daroussin.Dd August 15, 2021
30d0ef721eSBaptiste Daroussin.Dt EDITLINE 3
31d0ef721eSBaptiste Daroussin.Os
32d0ef721eSBaptiste Daroussin.Sh NAME
33d0ef721eSBaptiste Daroussin.Nm editline ,
34d0ef721eSBaptiste Daroussin.Nm el_init ,
35d0ef721eSBaptiste Daroussin.Nm el_init_fd ,
36d0ef721eSBaptiste Daroussin.Nm el_end ,
37d0ef721eSBaptiste Daroussin.Nm el_reset ,
38d0ef721eSBaptiste Daroussin.Nm el_gets ,
39d0ef721eSBaptiste Daroussin.Nm el_wgets ,
40d0ef721eSBaptiste Daroussin.Nm el_getc ,
41d0ef721eSBaptiste Daroussin.Nm el_wgetc ,
42d0ef721eSBaptiste Daroussin.Nm el_push ,
43d0ef721eSBaptiste Daroussin.Nm el_wpush ,
44d0ef721eSBaptiste Daroussin.Nm el_parse ,
45d0ef721eSBaptiste Daroussin.Nm el_wparse ,
46d0ef721eSBaptiste Daroussin.Nm el_set ,
47d0ef721eSBaptiste Daroussin.Nm el_wset ,
48d0ef721eSBaptiste Daroussin.Nm el_get ,
49d0ef721eSBaptiste Daroussin.Nm el_wget ,
50d0ef721eSBaptiste Daroussin.Nm el_source ,
51d0ef721eSBaptiste Daroussin.Nm el_resize ,
52d0ef721eSBaptiste Daroussin.Nm el_cursor ,
53d0ef721eSBaptiste Daroussin.Nm el_line ,
54d0ef721eSBaptiste Daroussin.Nm el_wline ,
55d0ef721eSBaptiste Daroussin.Nm el_insertstr ,
56d0ef721eSBaptiste Daroussin.Nm el_winsertstr ,
57d0ef721eSBaptiste Daroussin.Nm el_deletestr ,
58d0ef721eSBaptiste Daroussin.Nm el_wdeletestr ,
59d0ef721eSBaptiste Daroussin.Nm history_init ,
60d0ef721eSBaptiste Daroussin.Nm history_winit ,
61d0ef721eSBaptiste Daroussin.Nm history_end ,
62d0ef721eSBaptiste Daroussin.Nm history_wend ,
63d0ef721eSBaptiste Daroussin.Nm history ,
64d0ef721eSBaptiste Daroussin.Nm history_w ,
65d0ef721eSBaptiste Daroussin.Nm tok_init ,
66d0ef721eSBaptiste Daroussin.Nm tok_winit ,
67d0ef721eSBaptiste Daroussin.Nm tok_end ,
68d0ef721eSBaptiste Daroussin.Nm tok_wend ,
69d0ef721eSBaptiste Daroussin.Nm tok_reset ,
70d0ef721eSBaptiste Daroussin.Nm tok_wreset ,
71d0ef721eSBaptiste Daroussin.Nm tok_line ,
72d0ef721eSBaptiste Daroussin.Nm tok_wline ,
73d0ef721eSBaptiste Daroussin.Nm tok_str ,
74d0ef721eSBaptiste Daroussin.Nm tok_wstr
75d0ef721eSBaptiste Daroussin.Nd line editor, history and tokenization functions
76d0ef721eSBaptiste Daroussin.Sh LIBRARY
77d0ef721eSBaptiste Daroussin.Lb libedit
78d0ef721eSBaptiste Daroussin.Sh SYNOPSIS
79d0ef721eSBaptiste Daroussin.In histedit.h
80d0ef721eSBaptiste Daroussin.Ft EditLine *
81d0ef721eSBaptiste Daroussin.Fn el_init "const char *prog" "FILE *fin" "FILE *fout" "FILE *ferr"
82d0ef721eSBaptiste Daroussin.Ft EditLine *
83d0ef721eSBaptiste Daroussin.Fn el_init_fd "const char *prog" "FILE *fin" "FILE *fout" "FILE *ferr" "int fdin" "int fdout" "int fderr"
84d0ef721eSBaptiste Daroussin.Ft void
85d0ef721eSBaptiste Daroussin.Fn el_end "EditLine *e"
86d0ef721eSBaptiste Daroussin.Ft void
87d0ef721eSBaptiste Daroussin.Fn el_reset "EditLine *e"
88d0ef721eSBaptiste Daroussin.Ft const char *
89d0ef721eSBaptiste Daroussin.Fn el_gets "EditLine *e" "int *count"
90d0ef721eSBaptiste Daroussin.Ft const wchar_t *
91d0ef721eSBaptiste Daroussin.Fn el_wgets "EditLine *e" "int *count"
92d0ef721eSBaptiste Daroussin.Ft int
93d0ef721eSBaptiste Daroussin.Fn el_getc "EditLine *e" "char *ch"
94d0ef721eSBaptiste Daroussin.Ft int
95d0ef721eSBaptiste Daroussin.Fn el_wgetc "EditLine *e" "wchar_t *wc"
96d0ef721eSBaptiste Daroussin.Ft void
97d0ef721eSBaptiste Daroussin.Fn el_push "EditLine *e" "const char *mbs"
98d0ef721eSBaptiste Daroussin.Ft void
99d0ef721eSBaptiste Daroussin.Fn el_wpush "EditLine *e" "const wchar_t *wcs"
100d0ef721eSBaptiste Daroussin.Ft int
101d0ef721eSBaptiste Daroussin.Fn el_parse "EditLine *e" "int argc" "const char *argv[]"
102d0ef721eSBaptiste Daroussin.Ft int
103d0ef721eSBaptiste Daroussin.Fn el_wparse "EditLine *e" "int argc" "const wchar_t *argv[]"
104d0ef721eSBaptiste Daroussin.Ft int
105d0ef721eSBaptiste Daroussin.Fn el_set "EditLine *e" "int op" "..."
106d0ef721eSBaptiste Daroussin.Ft int
107d0ef721eSBaptiste Daroussin.Fn el_wset "EditLine *e" "int op" "..."
108d0ef721eSBaptiste Daroussin.Ft int
109d0ef721eSBaptiste Daroussin.Fn el_get "EditLine *e" "int op" "..."
110d0ef721eSBaptiste Daroussin.Ft int
111d0ef721eSBaptiste Daroussin.Fn el_wget "EditLine *e" "int op" "..."
112d0ef721eSBaptiste Daroussin.Ft int
113d0ef721eSBaptiste Daroussin.Fn el_source "EditLine *e" "const char *file"
114d0ef721eSBaptiste Daroussin.Ft void
115d0ef721eSBaptiste Daroussin.Fn el_resize "EditLine *e"
116d0ef721eSBaptiste Daroussin.Ft int
117d0ef721eSBaptiste Daroussin.Fn el_cursor "EditLine *e" "int count"
118d0ef721eSBaptiste Daroussin.Ft const LineInfo *
119d0ef721eSBaptiste Daroussin.Fn el_line "EditLine *e"
120d0ef721eSBaptiste Daroussin.Ft const LineInfoW *
121d0ef721eSBaptiste Daroussin.Fn el_wline "EditLine *e"
122d0ef721eSBaptiste Daroussin.Ft int
123d0ef721eSBaptiste Daroussin.Fn el_insertstr "EditLine *e" "const char *str"
124d0ef721eSBaptiste Daroussin.Ft int
125d0ef721eSBaptiste Daroussin.Fn el_winsertstr "EditLine *e" "const wchar_t *str"
126d0ef721eSBaptiste Daroussin.Ft void
127d0ef721eSBaptiste Daroussin.Fn el_deletestr "EditLine *e" "int count"
128d0ef721eSBaptiste Daroussin.Ft void
129d0ef721eSBaptiste Daroussin.Fn el_wdeletestr "EditLine *e" "int count"
130d0ef721eSBaptiste Daroussin.Ft History *
131d0ef721eSBaptiste Daroussin.Fn history_init void
132d0ef721eSBaptiste Daroussin.Ft HistoryW *
133d0ef721eSBaptiste Daroussin.Fn history_winit void
134d0ef721eSBaptiste Daroussin.Ft void
135d0ef721eSBaptiste Daroussin.Fn history_end "History *h"
136d0ef721eSBaptiste Daroussin.Ft void
137d0ef721eSBaptiste Daroussin.Fn history_wend "HistoryW *h"
138d0ef721eSBaptiste Daroussin.Ft int
139d0ef721eSBaptiste Daroussin.Fn history "History *h" "HistEvent *ev" "int op" "..."
140d0ef721eSBaptiste Daroussin.Ft int
141d0ef721eSBaptiste Daroussin.Fn history_w "HistoryW *h" "HistEventW *ev" "int op" "..."
142d0ef721eSBaptiste Daroussin.Ft Tokenizer *
143d0ef721eSBaptiste Daroussin.Fn tok_init "const char *IFS"
144d0ef721eSBaptiste Daroussin.Ft TokenizerW *
145d0ef721eSBaptiste Daroussin.Fn tok_winit "const wchar_t *IFS"
146d0ef721eSBaptiste Daroussin.Ft void
147d0ef721eSBaptiste Daroussin.Fn tok_end "Tokenizer *t"
148d0ef721eSBaptiste Daroussin.Ft void
149d0ef721eSBaptiste Daroussin.Fn tok_wend "TokenizerW *t"
150d0ef721eSBaptiste Daroussin.Ft void
151d0ef721eSBaptiste Daroussin.Fn tok_reset "Tokenizer *t"
152d0ef721eSBaptiste Daroussin.Ft void
153d0ef721eSBaptiste Daroussin.Fn tok_wreset "TokenizerW *t"
154d0ef721eSBaptiste Daroussin.Ft int
155d0ef721eSBaptiste Daroussin.Fn tok_line "Tokenizer *t" "const LineInfo *li" "int *argc" "const char **argv[]" "int *cursorc" "int *cursoro"
156d0ef721eSBaptiste Daroussin.Ft int
157d0ef721eSBaptiste Daroussin.Fn tok_wline "TokenizerW *t" "const LineInfoW *li" "int *argc" "const wchar_t **argv[]" "int *cursorc" "int *cursoro"
158d0ef721eSBaptiste Daroussin.Ft int
159d0ef721eSBaptiste Daroussin.Fn tok_str "Tokenizer *t" "const char *str" "int *argc" "const char **argv[]"
160d0ef721eSBaptiste Daroussin.Ft int
161d0ef721eSBaptiste Daroussin.Fn tok_wstr "TokenizerW *t" "const wchar_t *str" "int *argc" "const wchar_t **argv[]"
162d0ef721eSBaptiste Daroussin.Sh DESCRIPTION
163d0ef721eSBaptiste DaroussinThe
164d0ef721eSBaptiste Daroussin.Nm
165d0ef721eSBaptiste Daroussinlibrary provides generic line editing, history and tokenization functions,
166d0ef721eSBaptiste Daroussinsimilar to those found in
167d0ef721eSBaptiste Daroussin.Xr sh 1 .
168d0ef721eSBaptiste Daroussin.Pp
169d0ef721eSBaptiste DaroussinThese functions are available in the
170d0ef721eSBaptiste Daroussin.Nm libedit
171d0ef721eSBaptiste Daroussinlibrary (which needs the
172d0ef721eSBaptiste Daroussin.Nm libtermcap
173d0ef721eSBaptiste Daroussinlibrary).
174d0ef721eSBaptiste DaroussinPrograms should be linked with
175d0ef721eSBaptiste Daroussin.Fl ledit ltermcap .
176d0ef721eSBaptiste Daroussin.Pp
177d0ef721eSBaptiste DaroussinThe
178d0ef721eSBaptiste Daroussin.Nm
179d0ef721eSBaptiste Daroussinlibrary respects the
180d0ef721eSBaptiste Daroussin.Ev LC_CTYPE
181d0ef721eSBaptiste Daroussinlocale set by the application program and never uses
182d0ef721eSBaptiste Daroussin.Xr setlocale 3
183d0ef721eSBaptiste Daroussinto change the locale.
184d0ef721eSBaptiste Daroussin.Sh LINE EDITING FUNCTIONS
185d0ef721eSBaptiste DaroussinThe line editing functions use a common data structure,
186d0ef721eSBaptiste Daroussin.Fa EditLine ,
187d0ef721eSBaptiste Daroussinwhich is created by
188d0ef721eSBaptiste Daroussin.Fn el_init
189d0ef721eSBaptiste Daroussinor
190d0ef721eSBaptiste Daroussin.Fn el_init_fd
191d0ef721eSBaptiste Daroussinand freed by
192d0ef721eSBaptiste Daroussin.Fn el_end .
193d0ef721eSBaptiste Daroussin.Pp
194d0ef721eSBaptiste DaroussinThe wide-character functions behave the same way as their narrow
195d0ef721eSBaptiste Daroussincounterparts.
196d0ef721eSBaptiste Daroussin.Pp
197d0ef721eSBaptiste DaroussinThe following functions are available:
198d0ef721eSBaptiste Daroussin.Bl -tag -width 4n
199d0ef721eSBaptiste Daroussin.It Fn el_init
200d0ef721eSBaptiste DaroussinInitialize the line editor, and return a data structure
201d0ef721eSBaptiste Daroussinto be used by all other line editing functions, or
202d0ef721eSBaptiste Daroussin.Dv NULL
203d0ef721eSBaptiste Daroussinon failure.
204d0ef721eSBaptiste Daroussin.Fa prog
205d0ef721eSBaptiste Daroussinis the name of the invoking program, used when reading the
206d0ef721eSBaptiste Daroussin.Xr editrc 5
207d0ef721eSBaptiste Daroussinfile to determine which settings to use.
208d0ef721eSBaptiste Daroussin.Fa fin ,
209d0ef721eSBaptiste Daroussin.Fa fout
210d0ef721eSBaptiste Daroussinand
211d0ef721eSBaptiste Daroussin.Fa ferr
212d0ef721eSBaptiste Daroussinare the input, output, and error streams (respectively) to use.
213d0ef721eSBaptiste DaroussinIn this documentation, references to
214d0ef721eSBaptiste Daroussin.Dq the tty
215d0ef721eSBaptiste Daroussinare actually to this input/output stream combination.
216d0ef721eSBaptiste Daroussin.It Fn el_init_fd
217d0ef721eSBaptiste DaroussinLike
218d0ef721eSBaptiste Daroussin.Fn el_init
219d0ef721eSBaptiste Daroussinbut allows specifying file descriptors for the
220d0ef721eSBaptiste Daroussin.Xr stdio 3
221d0ef721eSBaptiste Daroussincorresponding streams, in case those were created with
222d0ef721eSBaptiste Daroussin.Xr funopen 3 .
223d0ef721eSBaptiste Daroussin.It Fn el_end
224d0ef721eSBaptiste DaroussinClean up and finish with
225d0ef721eSBaptiste Daroussin.Fa e ,
226d0ef721eSBaptiste Daroussinassumed to have been created with
227d0ef721eSBaptiste Daroussin.Fn el_init
228d0ef721eSBaptiste Daroussinor
229d0ef721eSBaptiste Daroussin.Fn el_init_fd .
230d0ef721eSBaptiste Daroussin.It Fn el_reset
231d0ef721eSBaptiste DaroussinReset the tty and the parser.
232d0ef721eSBaptiste DaroussinThis should be called after an error which may have upset the tty's
233d0ef721eSBaptiste Daroussinstate.
234d0ef721eSBaptiste Daroussin.It Fn el_gets
235d0ef721eSBaptiste DaroussinRead a line from the tty.
236d0ef721eSBaptiste Daroussin.Fa count
237d0ef721eSBaptiste Daroussinis modified to contain the number of characters read.
238d0ef721eSBaptiste DaroussinReturns the line read if successful, or
239d0ef721eSBaptiste Daroussin.Dv NULL
240d0ef721eSBaptiste Daroussinif no characters were read or if an error occurred.
241d0ef721eSBaptiste DaroussinIf an error occurred,
242d0ef721eSBaptiste Daroussin.Fa count
243d0ef721eSBaptiste Daroussinis set to \-1 and
244d0ef721eSBaptiste Daroussin.Dv errno
245d0ef721eSBaptiste Daroussincontains the error code that caused it.
246d0ef721eSBaptiste DaroussinThe return value may not remain valid across calls to
247d0ef721eSBaptiste Daroussin.Fn el_gets
248d0ef721eSBaptiste Daroussinand must be copied if the data is to be retained.
249d0ef721eSBaptiste Daroussin.It Fn el_wgetc
250d0ef721eSBaptiste DaroussinRead a wide character from the tty, respecting the current locale,
251d0ef721eSBaptiste Daroussinor from the input queue described in
252d0ef721eSBaptiste Daroussin.Xr editline 7
253d0ef721eSBaptiste Daroussinif that is not empty, and store it in
254d0ef721eSBaptiste Daroussin.Fa wc .
255d0ef721eSBaptiste DaroussinIf an invalid or incomplete character is found, it is discarded,
256d0ef721eSBaptiste Daroussin.Va errno
257d0ef721eSBaptiste Daroussinis set to
258d0ef721eSBaptiste Daroussin.Er EILSEQ ,
259d0ef721eSBaptiste Daroussinand the next character is read and stored in
260d0ef721eSBaptiste Daroussin.Fa wc .
261d0ef721eSBaptiste DaroussinReturns 1 if a valid character was read, 0 on end of file, or \-1 on
262d0ef721eSBaptiste Daroussin.Xr read 2
263d0ef721eSBaptiste Daroussinfailure.
264d0ef721eSBaptiste DaroussinIn the latter case,
265d0ef721eSBaptiste Daroussin.Va errno
266d0ef721eSBaptiste Daroussinis set to indicate the error.
267d0ef721eSBaptiste Daroussin.It Fn el_getc
268d0ef721eSBaptiste DaroussinRead a wide character as described for
269d0ef721eSBaptiste Daroussin.Fn el_wgetc
270d0ef721eSBaptiste Daroussinand return 0 on end of file or \-1 on failure.
271d0ef721eSBaptiste DaroussinIf the wide character can be represented as a single-byte character,
272d0ef721eSBaptiste Daroussinconvert it with
273d0ef721eSBaptiste Daroussin.Xr wctob 3 ,
274d0ef721eSBaptiste Daroussinstore the result in
275d0ef721eSBaptiste Daroussin.Fa ch ,
276d0ef721eSBaptiste Daroussinand return 1; otherwise, set
277d0ef721eSBaptiste Daroussin.Va errno
278d0ef721eSBaptiste Daroussinto
279d0ef721eSBaptiste Daroussin.Er ERANGE
280d0ef721eSBaptiste Daroussinand return \-1.
281d0ef721eSBaptiste DaroussinIn the C or POSIX locale, this simply reads a byte, but for any other
282d0ef721eSBaptiste Daroussinlocale, including UTF-8, this is rarely useful.
283d0ef721eSBaptiste Daroussin.It Fn el_wpush
284d0ef721eSBaptiste DaroussinPush the wide character string
285d0ef721eSBaptiste Daroussin.Fa wcs
286d0ef721eSBaptiste Daroussinback onto the input queue described in
287d0ef721eSBaptiste Daroussin.Xr editline 7 .
288d0ef721eSBaptiste DaroussinIf the queue overflows, for example due to a recursive macro,
289d0ef721eSBaptiste Daroussinor if an error occurs, for example because
290d0ef721eSBaptiste Daroussin.Fa wcs
291d0ef721eSBaptiste Daroussinis
292d0ef721eSBaptiste Daroussin.Dv NULL
293d0ef721eSBaptiste Daroussinor memory allocation fails, the function beeps at the user,
294d0ef721eSBaptiste Daroussinbut does not report the problem to the caller.
295d0ef721eSBaptiste Daroussin.It Fn el_push
296d0ef721eSBaptiste DaroussinUse the current locale to convert the multibyte string
297d0ef721eSBaptiste Daroussin.Fa mbs
298d0ef721eSBaptiste Daroussinto a wide character string, and pass the result to
299d0ef721eSBaptiste Daroussin.Fn el_wpush .
300d0ef721eSBaptiste Daroussin.It Fn el_parse
301d0ef721eSBaptiste DaroussinParses the
302d0ef721eSBaptiste Daroussin.Fa argv
303d0ef721eSBaptiste Daroussinarray (which is
304d0ef721eSBaptiste Daroussin.Fa argc
305d0ef721eSBaptiste Daroussinelements in size)
306d0ef721eSBaptiste Daroussinto execute builtin
307d0ef721eSBaptiste Daroussin.Nm
308d0ef721eSBaptiste Daroussincommands.
309d0ef721eSBaptiste DaroussinIf the command is prefixed with
310d0ef721eSBaptiste Daroussin.Dq prog :
311d0ef721eSBaptiste Daroussinthen
312d0ef721eSBaptiste Daroussin.Fn el_parse
313d0ef721eSBaptiste Daroussinwill only execute the command if
314d0ef721eSBaptiste Daroussin.Dq prog
315d0ef721eSBaptiste Daroussinmatches the
316d0ef721eSBaptiste Daroussin.Fa prog
317d0ef721eSBaptiste Daroussinargument supplied to
318d0ef721eSBaptiste Daroussin.Fn el_init .
319d0ef721eSBaptiste DaroussinThe return value is
320d0ef721eSBaptiste Daroussin\-1 if the command is unknown,
321d0ef721eSBaptiste Daroussin0 if there was no error or
322d0ef721eSBaptiste Daroussin.Dq prog
323d0ef721eSBaptiste Daroussindidn't match, or
324d0ef721eSBaptiste Daroussin1 if the command returned an error.
325d0ef721eSBaptiste DaroussinRefer to
326d0ef721eSBaptiste Daroussin.Xr editrc 5
327d0ef721eSBaptiste Daroussinfor more information.
328d0ef721eSBaptiste Daroussin.It Fn el_set
329d0ef721eSBaptiste DaroussinSet
330d0ef721eSBaptiste Daroussin.Nm
331d0ef721eSBaptiste Daroussinparameters.
332d0ef721eSBaptiste Daroussin.Fa op
333d0ef721eSBaptiste Daroussindetermines which parameter to set, and each operation has its
334d0ef721eSBaptiste Daroussinown parameter list.
335d0ef721eSBaptiste DaroussinReturns 0 on success, \-1 on failure.
336d0ef721eSBaptiste Daroussin.Pp
337d0ef721eSBaptiste DaroussinThe following values for
338d0ef721eSBaptiste Daroussin.Fa op
339d0ef721eSBaptiste Daroussinare supported, along with the required argument list:
340d0ef721eSBaptiste Daroussin.Bl -tag -width 4n
341d0ef721eSBaptiste Daroussin.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)"
342d0ef721eSBaptiste DaroussinDefine prompt printing function as
343d0ef721eSBaptiste Daroussin.Fa f ,
344d0ef721eSBaptiste Daroussinwhich is to return a string that contains the prompt.
345d0ef721eSBaptiste Daroussin.It Dv EL_PROMPT_ESC , Fa "char *(*f)(EditLine *)" , Fa "char c"
346d0ef721eSBaptiste DaroussinSame as
347d0ef721eSBaptiste Daroussin.Dv EL_PROMPT ,
348d0ef721eSBaptiste Daroussinbut the
349d0ef721eSBaptiste Daroussin.Fa c
350d0ef721eSBaptiste Daroussinargument indicates the start/stop literal prompt character.
351d0ef721eSBaptiste Daroussin.Pp
352d0ef721eSBaptiste DaroussinIf a start/stop literal character is found in the prompt, the
353d0ef721eSBaptiste Daroussincharacter itself
354d0ef721eSBaptiste Daroussinis not printed, but characters after it are printed directly to the
355d0ef721eSBaptiste Daroussinterminal without affecting the state of the current line.
356d0ef721eSBaptiste DaroussinA subsequent second start/stop literal character ends this behavior.
357d0ef721eSBaptiste DaroussinThis is typically used to embed literal escape sequences that change the
358d0ef721eSBaptiste Daroussincolor/style of the terminal in the prompt.
359d0ef721eSBaptiste DaroussinNote that the literal escape character cannot be the last character in the
360d0ef721eSBaptiste Daroussinprompt, as the escape sequence is attached to the next character in the prompt.
361d0ef721eSBaptiste Daroussin.Dv 0
362d0ef721eSBaptiste Daroussinunsets it.
363d0ef721eSBaptiste Daroussin.It Dv EL_REFRESH
364d0ef721eSBaptiste DaroussinRe-display the current line on the next terminal line.
365d0ef721eSBaptiste Daroussin.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)"
366d0ef721eSBaptiste DaroussinDefine right side prompt printing function as
367d0ef721eSBaptiste Daroussin.Fa f ,
368d0ef721eSBaptiste Daroussinwhich is to return a string that contains the prompt.
369d0ef721eSBaptiste Daroussin.It Dv EL_RPROMPT_ESC , Fa "char *(*f)(EditLine *)" , Fa "char c"
370d0ef721eSBaptiste DaroussinDefine the right prompt printing function but with a literal escape character.
371d0ef721eSBaptiste Daroussin.It Dv EL_TERMINAL , Fa "const char *type"
372d0ef721eSBaptiste DaroussinDefine terminal type of the tty to be
373d0ef721eSBaptiste Daroussin.Fa type ,
374d0ef721eSBaptiste Daroussinor to
375d0ef721eSBaptiste Daroussin.Ev TERM
376d0ef721eSBaptiste Daroussinif
377d0ef721eSBaptiste Daroussin.Fa type
378d0ef721eSBaptiste Daroussinis
379d0ef721eSBaptiste Daroussin.Dv NULL .
380d0ef721eSBaptiste Daroussin.It Dv EL_EDITOR , Fa "const char *mode"
381d0ef721eSBaptiste DaroussinSet editing mode to
382d0ef721eSBaptiste Daroussin.Fa mode ,
383d0ef721eSBaptiste Daroussinwhich must be one of
384d0ef721eSBaptiste Daroussin.Dq emacs
385d0ef721eSBaptiste Daroussinor
386d0ef721eSBaptiste Daroussin.Dq vi .
387d0ef721eSBaptiste Daroussin.It Dv EL_SIGNAL , Fa "int flag"
388d0ef721eSBaptiste DaroussinIf
389d0ef721eSBaptiste Daroussin.Fa flag
390d0ef721eSBaptiste Daroussinis non-zero,
391d0ef721eSBaptiste Daroussin.Nm
392d0ef721eSBaptiste Daroussinwill install its own signal handler for the following signals when
393d0ef721eSBaptiste Daroussinreading command input:
394d0ef721eSBaptiste Daroussin.Dv SIGCONT ,
395d0ef721eSBaptiste Daroussin.Dv SIGHUP ,
396d0ef721eSBaptiste Daroussin.Dv SIGINT ,
397d0ef721eSBaptiste Daroussin.Dv SIGQUIT ,
398d0ef721eSBaptiste Daroussin.Dv SIGSTOP ,
399d0ef721eSBaptiste Daroussin.Dv SIGTERM ,
400d0ef721eSBaptiste Daroussin.Dv SIGTSTP ,
401d0ef721eSBaptiste Daroussinand
402d0ef721eSBaptiste Daroussin.Dv SIGWINCH .
403d0ef721eSBaptiste DaroussinOtherwise, the current signal handlers will be used.
404d0ef721eSBaptiste Daroussin.It Dv EL_BIND , Fa "const char *" , Fa "..." , Dv NULL
405d0ef721eSBaptiste DaroussinPerform the
406d0ef721eSBaptiste Daroussin.Ic bind
407d0ef721eSBaptiste Daroussinbuiltin command.
408d0ef721eSBaptiste DaroussinRefer to
409d0ef721eSBaptiste Daroussin.Xr editrc 5
410d0ef721eSBaptiste Daroussinfor more information.
411d0ef721eSBaptiste Daroussin.It Dv EL_ECHOTC , Fa "const char *" , Fa "..." , Dv NULL
412d0ef721eSBaptiste DaroussinPerform the
413d0ef721eSBaptiste Daroussin.Ic echotc
414d0ef721eSBaptiste Daroussinbuiltin command.
415d0ef721eSBaptiste DaroussinRefer to
416d0ef721eSBaptiste Daroussin.Xr editrc 5
417d0ef721eSBaptiste Daroussinfor more information.
418d0ef721eSBaptiste Daroussin.It Dv EL_SETTC , Fa "const char *" , Fa "..." , Dv NULL
419d0ef721eSBaptiste DaroussinPerform the
420d0ef721eSBaptiste Daroussin.Ic settc
421d0ef721eSBaptiste Daroussinbuiltin command.
422d0ef721eSBaptiste DaroussinRefer to
423d0ef721eSBaptiste Daroussin.Xr editrc 5
424d0ef721eSBaptiste Daroussinfor more information.
425d0ef721eSBaptiste Daroussin.It Dv EL_SETTY , Fa "const char *" , Fa "..." , Dv NULL
426d0ef721eSBaptiste DaroussinPerform the
427d0ef721eSBaptiste Daroussin.Ic setty
428d0ef721eSBaptiste Daroussinbuiltin command.
429d0ef721eSBaptiste DaroussinRefer to
430d0ef721eSBaptiste Daroussin.Xr editrc 5
431d0ef721eSBaptiste Daroussinfor more information.
432d0ef721eSBaptiste Daroussin.It Dv EL_TELLTC , Fa "const char *" , Fa "..." , Dv NULL
433d0ef721eSBaptiste DaroussinPerform the
434d0ef721eSBaptiste Daroussin.Ic telltc
435d0ef721eSBaptiste Daroussinbuiltin command.
436d0ef721eSBaptiste DaroussinRefer to
437d0ef721eSBaptiste Daroussin.Xr editrc 5
438d0ef721eSBaptiste Daroussinfor more information.
439d0ef721eSBaptiste Daroussin.It Dv EL_ADDFN , Fa "const char *name" , Fa "const char *help" , \
440d0ef721eSBaptiste DaroussinFa "unsigned char (*func)(EditLine *e, int ch)"
441d0ef721eSBaptiste DaroussinAdd a user defined function,
442d0ef721eSBaptiste Daroussin.Fn func ,
443d0ef721eSBaptiste Daroussinreferred to as
444d0ef721eSBaptiste Daroussin.Fa name
445d0ef721eSBaptiste Daroussinwhich is invoked when a key which is bound to
446d0ef721eSBaptiste Daroussin.Fa name
447d0ef721eSBaptiste Daroussinis entered.
448d0ef721eSBaptiste Daroussin.Fa help
449d0ef721eSBaptiste Daroussinis a description of
450d0ef721eSBaptiste Daroussin.Fa name .
451d0ef721eSBaptiste DaroussinAt invocation time,
452d0ef721eSBaptiste Daroussin.Fa ch
453d0ef721eSBaptiste Daroussinis the key which caused the invocation.
454d0ef721eSBaptiste DaroussinThe return value of
455d0ef721eSBaptiste Daroussin.Fn func
456d0ef721eSBaptiste Daroussinshould be one of:
457d0ef721eSBaptiste Daroussin.Bl -tag -width "CC_REDISPLAY"
458d0ef721eSBaptiste Daroussin.It Dv CC_NORM
459d0ef721eSBaptiste DaroussinAdd a normal character.
460d0ef721eSBaptiste Daroussin.It Dv CC_NEWLINE
461d0ef721eSBaptiste DaroussinEnd of line was entered.
462d0ef721eSBaptiste Daroussin.It Dv CC_EOF
463d0ef721eSBaptiste DaroussinEOF was entered.
464d0ef721eSBaptiste Daroussin.It Dv CC_ARGHACK
465d0ef721eSBaptiste DaroussinExpecting further command input as arguments, do nothing visually.
466d0ef721eSBaptiste Daroussin.It Dv CC_REFRESH
467d0ef721eSBaptiste DaroussinRefresh display.
468d0ef721eSBaptiste Daroussin.It Dv CC_REFRESH_BEEP
469d0ef721eSBaptiste DaroussinRefresh display, and beep.
470d0ef721eSBaptiste Daroussin.It Dv CC_CURSOR
471d0ef721eSBaptiste DaroussinCursor moved, so update and perform
472d0ef721eSBaptiste Daroussin.Dv CC_REFRESH .
473d0ef721eSBaptiste Daroussin.It Dv CC_REDISPLAY
474d0ef721eSBaptiste DaroussinRedisplay entire input line.
475d0ef721eSBaptiste DaroussinThis is useful if a key binding outputs extra information.
476d0ef721eSBaptiste Daroussin.It Dv CC_ERROR
477d0ef721eSBaptiste DaroussinAn error occurred.
478d0ef721eSBaptiste DaroussinBeep, and flush tty.
479d0ef721eSBaptiste Daroussin.It Dv CC_FATAL
480d0ef721eSBaptiste DaroussinFatal error, reset tty to known state.
481d0ef721eSBaptiste Daroussin.El
482d0ef721eSBaptiste Daroussin.It Dv EL_HIST , Fa "History *(*func)(History *, int op, ...)" , \
483d0ef721eSBaptiste DaroussinFa "const char *ptr"
484d0ef721eSBaptiste DaroussinDefines which history function to use, which is usually
485d0ef721eSBaptiste Daroussin.Fn history .
486d0ef721eSBaptiste Daroussin.Fa ptr
487d0ef721eSBaptiste Daroussinshould be the value returned by
488d0ef721eSBaptiste Daroussin.Fn history_init .
489d0ef721eSBaptiste Daroussin.It Dv EL_EDITMODE , Fa "int flag"
490d0ef721eSBaptiste DaroussinIf
491d0ef721eSBaptiste Daroussin.Fa flag
492d0ef721eSBaptiste Daroussinis non-zero,
493d0ef721eSBaptiste Daroussinediting is enabled (the default).
494d0ef721eSBaptiste DaroussinNote that this is only an indication, and does not
495d0ef721eSBaptiste Daroussinaffect the operation of
496d0ef721eSBaptiste Daroussin.Nm .
497d0ef721eSBaptiste DaroussinAt this time, it is the caller's responsibility to
498d0ef721eSBaptiste Daroussincheck this
499d0ef721eSBaptiste Daroussin(using
500d0ef721eSBaptiste Daroussin.Fn el_get )
501d0ef721eSBaptiste Daroussinto determine if editing should be enabled or not.
502d0ef721eSBaptiste Daroussin.It Dv EL_UNBUFFERED , Fa "int flag"
503d0ef721eSBaptiste DaroussinIf
504d0ef721eSBaptiste Daroussin.Fa flag
505d0ef721eSBaptiste Daroussinis zero,
506d0ef721eSBaptiste Daroussinunbuffered mode is disabled (the default).
507d0ef721eSBaptiste DaroussinIn unbuffered mode,
508d0ef721eSBaptiste Daroussin.Fn el_gets
509d0ef721eSBaptiste Daroussinwill return immediately after processing a single character.
510*91f76417SBaptiste Daroussin.It Dv EL_SAFEREAD , Fa "int flag"
511*91f76417SBaptiste DaroussinIf the
512*91f76417SBaptiste Daroussin.Fa flag
513*91f76417SBaptiste Daroussinargument is non-zero, then
514*91f76417SBaptiste Daroussin.Nm editline
515*91f76417SBaptiste Daroussinattempts to recover from read errors, ignoring the first interrrupted
516*91f76417SBaptiste Daroussinerror, and trying to reset the input file descriptor to reset non-blocking I/O.
517*91f76417SBaptiste DaroussinThis is disabled by default, and desirable only when
518*91f76417SBaptiste Daroussin.Nm editline
519*91f76417SBaptiste Daroussinis used in shell-like applications.
520d0ef721eSBaptiste Daroussin.It Dv EL_GETCFN , Fa "el_rfunc_t f"
521d0ef721eSBaptiste DaroussinWhenever reading a character, use the function
522d0ef721eSBaptiste Daroussin.Bd -ragged -offset indent -compact
523d0ef721eSBaptiste Daroussin.Ft int
524d0ef721eSBaptiste Daroussin.Fo f
525d0ef721eSBaptiste Daroussin.Fa "EditLine *e"
526d0ef721eSBaptiste Daroussin.Fa "wchar_t *wc"
527d0ef721eSBaptiste Daroussin.Fc
528d0ef721eSBaptiste Daroussin.Ed
529d0ef721eSBaptiste Daroussinwhich stores the character in
530d0ef721eSBaptiste Daroussin.Fa wc
531d0ef721eSBaptiste Daroussinand returns 1 on success, 0 on end of file, or \-1 on I/O or encoding
532d0ef721eSBaptiste Daroussinerrors.
533d0ef721eSBaptiste DaroussinFunctions internally using it include
534d0ef721eSBaptiste Daroussin.Fn el_wgets ,
535d0ef721eSBaptiste Daroussin.Fn el_wgetc ,
536d0ef721eSBaptiste Daroussin.Fn el_gets ,
537d0ef721eSBaptiste Daroussinand
538d0ef721eSBaptiste Daroussin.Fn el_getc .
539d0ef721eSBaptiste DaroussinInitially, a builtin function is installed, and replacing it
540d0ef721eSBaptiste Daroussinis discouraged because writing such a function is very error prone.
541d0ef721eSBaptiste DaroussinThe builtin function can be restored at any time by passing the
542d0ef721eSBaptiste Daroussinspecial value
543d0ef721eSBaptiste Daroussin.Dv EL_BUILTIN_GETCFN
544d0ef721eSBaptiste Daroussininstead of a function pointer.
545d0ef721eSBaptiste Daroussin.It Dv EL_CLIENTDATA , Fa "void *data"
546d0ef721eSBaptiste DaroussinRegister
547d0ef721eSBaptiste Daroussin.Fa data
548d0ef721eSBaptiste Daroussinto be associated with this EditLine structure.
549d0ef721eSBaptiste DaroussinIt can be retrieved with the corresponding
550d0ef721eSBaptiste Daroussin.Fn el_get
551d0ef721eSBaptiste Daroussincall.
552d0ef721eSBaptiste Daroussin.It Dv EL_SETFP , Fa "int fd" , Fa "FILE *fp"
553d0ef721eSBaptiste DaroussinSet the current
554d0ef721eSBaptiste Daroussin.Nm editline
555d0ef721eSBaptiste Daroussinfile pointer for
556d0ef721eSBaptiste Daroussin.Dq input
557d0ef721eSBaptiste Daroussin.Fa fd
558d0ef721eSBaptiste Daroussin=
559d0ef721eSBaptiste Daroussin.Dv 0 ,
560d0ef721eSBaptiste Daroussin.Dq output
561d0ef721eSBaptiste Daroussin.Fa fd
562d0ef721eSBaptiste Daroussin=
563d0ef721eSBaptiste Daroussin.Dv 1 ,
564d0ef721eSBaptiste Daroussinor
565d0ef721eSBaptiste Daroussin.Dq error
566d0ef721eSBaptiste Daroussin.Fa fd
567d0ef721eSBaptiste Daroussin=
568d0ef721eSBaptiste Daroussin.Dv 2
569d0ef721eSBaptiste Daroussinfrom
570d0ef721eSBaptiste Daroussin.Fa fp .
571d0ef721eSBaptiste Daroussin.El
572d0ef721eSBaptiste Daroussin.It Fn el_get
573d0ef721eSBaptiste DaroussinGet
574d0ef721eSBaptiste Daroussin.Nm
575d0ef721eSBaptiste Daroussinparameters.
576d0ef721eSBaptiste Daroussin.Fa op
577d0ef721eSBaptiste Daroussindetermines which parameter to retrieve into
578d0ef721eSBaptiste Daroussin.Fa result .
579d0ef721eSBaptiste DaroussinReturns 0 if successful, \-1 otherwise.
580d0ef721eSBaptiste Daroussin.Pp
581d0ef721eSBaptiste DaroussinThe following values for
582d0ef721eSBaptiste Daroussin.Fa op
583d0ef721eSBaptiste Daroussinare supported, along with actual type of
584d0ef721eSBaptiste Daroussin.Fa result :
585d0ef721eSBaptiste Daroussin.Bl -tag -width 4n
586d0ef721eSBaptiste Daroussin.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c"
587d0ef721eSBaptiste DaroussinSet
588d0ef721eSBaptiste Daroussin.Fa f
589d0ef721eSBaptiste Daroussinto a pointer to the function that displays the prompt.
590d0ef721eSBaptiste DaroussinIf
591d0ef721eSBaptiste Daroussin.Fa c
592d0ef721eSBaptiste Daroussinis not
593d0ef721eSBaptiste Daroussin.Dv NULL ,
594d0ef721eSBaptiste Daroussinset it to the start/stop literal prompt character.
595d0ef721eSBaptiste Daroussin.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c"
596d0ef721eSBaptiste DaroussinSet
597d0ef721eSBaptiste Daroussin.Fa f
598d0ef721eSBaptiste Daroussinto a pointer to the function that displays the prompt.
599d0ef721eSBaptiste DaroussinIf
600d0ef721eSBaptiste Daroussin.Fa c
601d0ef721eSBaptiste Daroussinis not
602d0ef721eSBaptiste Daroussin.Dv NULL ,
603d0ef721eSBaptiste Daroussinset it to the start/stop literal prompt character.
604d0ef721eSBaptiste Daroussin.It Dv EL_EDITOR , Fa "const char **n"
605d0ef721eSBaptiste DaroussinSet the name of the editor in
606d0ef721eSBaptiste Daroussin.Fa n ,
607d0ef721eSBaptiste Daroussinwhich will be one of
608d0ef721eSBaptiste Daroussin.Dq emacs
609d0ef721eSBaptiste Daroussinor
610d0ef721eSBaptiste Daroussin.Dq vi .
611d0ef721eSBaptiste Daroussin.It Dv EL_GETTC , Fa "const char *name" , Fa "void *value"
612d0ef721eSBaptiste DaroussinIf
613d0ef721eSBaptiste Daroussin.Fa name
614d0ef721eSBaptiste Daroussinis a valid
615d0ef721eSBaptiste Daroussin.Xr termcap 5
616d0ef721eSBaptiste Daroussincapability set
617d0ef721eSBaptiste Daroussin.Fa value
618d0ef721eSBaptiste Daroussinto the current value of that capability.
619d0ef721eSBaptiste Daroussin.It Dv EL_SIGNAL , Fa "int *s"
620d0ef721eSBaptiste DaroussinSet
621d0ef721eSBaptiste Daroussin.Fa s
622d0ef721eSBaptiste Daroussinto non-zero if
623d0ef721eSBaptiste Daroussin.Nm
624d0ef721eSBaptiste Daroussinhas installed private signal handlers (see
625d0ef721eSBaptiste Daroussin.Fn el_get
626d0ef721eSBaptiste Daroussinabove).
627d0ef721eSBaptiste Daroussin.It Dv EL_EDITMODE , Fa "int *c"
628d0ef721eSBaptiste DaroussinSet
629d0ef721eSBaptiste Daroussin.Fa c
630d0ef721eSBaptiste Daroussinto non-zero if editing is enabled.
631d0ef721eSBaptiste Daroussin.It Dv EL_GETCFN , Fa "el_rfunc_t *f"
632d0ef721eSBaptiste DaroussinSet
633d0ef721eSBaptiste Daroussin.Fa f
634d0ef721eSBaptiste Daroussinto a pointer to the function that reads characters, or to
635d0ef721eSBaptiste Daroussin.Dv EL_BUILTIN_GETCFN
636d0ef721eSBaptiste Daroussinif the builtin function is in use.
637d0ef721eSBaptiste Daroussin.It Dv EL_CLIENTDATA , Fa "void **data"
638d0ef721eSBaptiste DaroussinSet
639d0ef721eSBaptiste Daroussin.Fa data
640d0ef721eSBaptiste Daroussinto the previously registered client data set by an
641d0ef721eSBaptiste Daroussin.Fn el_set
642d0ef721eSBaptiste Daroussincall.
643d0ef721eSBaptiste Daroussin.It Dv EL_UNBUFFERED , Fa "int *c"
644d0ef721eSBaptiste DaroussinSet
645d0ef721eSBaptiste Daroussin.Fa c
646d0ef721eSBaptiste Daroussinto non-zero if unbuffered mode is enabled.
647*91f76417SBaptiste Daroussin.It Dv EL_SAFEREAD , Fa "int *c"
648*91f76417SBaptiste DaroussinSet
649*91f76417SBaptiste Daroussin.Fa c
650*91f76417SBaptiste Daroussinto non-zero if safe read is set.
651d0ef721eSBaptiste Daroussin.It Dv EL_GETFP , Fa "int fd", Fa "FILE **fp"
652d0ef721eSBaptiste DaroussinSet
653d0ef721eSBaptiste Daroussin.Fa fp
654d0ef721eSBaptiste Daroussinto the current
655d0ef721eSBaptiste Daroussin.Nm editline
656d0ef721eSBaptiste Daroussinfile pointer for
657d0ef721eSBaptiste Daroussin.Dq input
658d0ef721eSBaptiste Daroussin.Fa fd
659d0ef721eSBaptiste Daroussin=
660d0ef721eSBaptiste Daroussin.Dv 0 ,
661d0ef721eSBaptiste Daroussin.Dq output
662d0ef721eSBaptiste Daroussin.Fa fd
663d0ef721eSBaptiste Daroussin=
664d0ef721eSBaptiste Daroussin.Dv 1 ,
665d0ef721eSBaptiste Daroussinor
666d0ef721eSBaptiste Daroussin.Dq error
667d0ef721eSBaptiste Daroussin.Fa fd
668d0ef721eSBaptiste Daroussin=
669d0ef721eSBaptiste Daroussin.Dv 2 .
670d0ef721eSBaptiste Daroussin.El
671d0ef721eSBaptiste Daroussin.It Fn el_source
672d0ef721eSBaptiste DaroussinInitialize
673d0ef721eSBaptiste Daroussin.Nm
674d0ef721eSBaptiste Daroussinby reading the contents of
675d0ef721eSBaptiste Daroussin.Fa file .
676d0ef721eSBaptiste Daroussin.Fn el_parse
677d0ef721eSBaptiste Daroussinis called for each line in
678d0ef721eSBaptiste Daroussin.Fa file .
679d0ef721eSBaptiste DaroussinIf
680d0ef721eSBaptiste Daroussin.Fa file
681d0ef721eSBaptiste Daroussinis
682d0ef721eSBaptiste Daroussin.Dv NULL ,
683d0ef721eSBaptiste Daroussintry
684d0ef721eSBaptiste Daroussin.Pa $EDITRC
685d0ef721eSBaptiste Daroussinand if that is not set
686d0ef721eSBaptiste Daroussin.Pa $HOME/.editrc .
687d0ef721eSBaptiste DaroussinRefer to
688d0ef721eSBaptiste Daroussin.Xr editrc 5
689d0ef721eSBaptiste Daroussinfor details on the format of
690d0ef721eSBaptiste Daroussin.Fa file .
691d0ef721eSBaptiste Daroussin.Fn el_source
692d0ef721eSBaptiste Daroussinreturns 0 on success and \-1 on error.
693d0ef721eSBaptiste Daroussin.It Fn el_resize
694d0ef721eSBaptiste DaroussinMust be called if the terminal size changes.
695d0ef721eSBaptiste DaroussinIf
696d0ef721eSBaptiste Daroussin.Dv EL_SIGNAL
697d0ef721eSBaptiste Daroussinhas been set with
698d0ef721eSBaptiste Daroussin.Fn el_set ,
699d0ef721eSBaptiste Daroussinthen this is done automatically.
700d0ef721eSBaptiste DaroussinOtherwise, it's the responsibility of the application to call
701d0ef721eSBaptiste Daroussin.Fn el_resize
702d0ef721eSBaptiste Daroussinon the appropriate occasions.
703d0ef721eSBaptiste Daroussin.It Fn el_cursor
704d0ef721eSBaptiste DaroussinMove the cursor to the right (if positive) or to the left (if negative)
705d0ef721eSBaptiste Daroussin.Fa count
706d0ef721eSBaptiste Daroussincharacters.
707d0ef721eSBaptiste DaroussinReturns the resulting offset of the cursor from the beginning of the line.
708d0ef721eSBaptiste Daroussin.It Fn el_line
709d0ef721eSBaptiste DaroussinReturn the editing information for the current line in a
710d0ef721eSBaptiste Daroussin.Fa LineInfo
711d0ef721eSBaptiste Daroussinstructure, which is defined as follows:
712d0ef721eSBaptiste Daroussin.Bd -literal
713d0ef721eSBaptiste Daroussintypedef struct lineinfo {
714d0ef721eSBaptiste Daroussin    const char *buffer;    /* address of buffer */
715d0ef721eSBaptiste Daroussin    const char *cursor;    /* address of cursor */
716d0ef721eSBaptiste Daroussin    const char *lastchar;  /* address of last character */
717d0ef721eSBaptiste Daroussin} LineInfo;
718d0ef721eSBaptiste Daroussin.Ed
719d0ef721eSBaptiste Daroussin.Pp
720d0ef721eSBaptiste Daroussin.Fa buffer
721d0ef721eSBaptiste Daroussinis not NUL terminated.
722d0ef721eSBaptiste DaroussinThis function may be called after
723d0ef721eSBaptiste Daroussin.Fn el_gets
724d0ef721eSBaptiste Daroussinto obtain the
725d0ef721eSBaptiste Daroussin.Fa LineInfo
726d0ef721eSBaptiste Daroussinstructure pertaining to line returned by that function,
727d0ef721eSBaptiste Daroussinand from within user defined functions added with
728d0ef721eSBaptiste Daroussin.Dv EL_ADDFN .
729d0ef721eSBaptiste Daroussin.It Fn el_insertstr
730d0ef721eSBaptiste DaroussinInsert
731d0ef721eSBaptiste Daroussin.Fa str
732d0ef721eSBaptiste Daroussininto the line at the cursor.
733d0ef721eSBaptiste DaroussinReturns \-1 if
734d0ef721eSBaptiste Daroussin.Fa str
735d0ef721eSBaptiste Daroussinis empty or won't fit, and 0 otherwise.
736d0ef721eSBaptiste Daroussin.It Fn el_deletestr
737d0ef721eSBaptiste DaroussinDelete
738d0ef721eSBaptiste Daroussin.Fa count
739d0ef721eSBaptiste Daroussincharacters before the cursor.
740d0ef721eSBaptiste Daroussin.El
741d0ef721eSBaptiste Daroussin.Sh HISTORY LIST FUNCTIONS
742d0ef721eSBaptiste DaroussinThe history functions use a common data structure,
743d0ef721eSBaptiste Daroussin.Fa History ,
744d0ef721eSBaptiste Daroussinwhich is created by
745d0ef721eSBaptiste Daroussin.Fn history_init
746d0ef721eSBaptiste Daroussinand freed by
747d0ef721eSBaptiste Daroussin.Fn history_end .
748d0ef721eSBaptiste Daroussin.Pp
749d0ef721eSBaptiste DaroussinThe following functions are available:
750d0ef721eSBaptiste Daroussin.Bl -tag -width 4n
751d0ef721eSBaptiste Daroussin.It Fn history_init
752d0ef721eSBaptiste DaroussinInitialize the history list, and return a data structure
753d0ef721eSBaptiste Daroussinto be used by all other history list functions, or
754d0ef721eSBaptiste Daroussin.Dv NULL
755d0ef721eSBaptiste Daroussinon failure.
756d0ef721eSBaptiste Daroussin.It Fn history_end
757d0ef721eSBaptiste DaroussinClean up and finish with
758d0ef721eSBaptiste Daroussin.Fa h ,
759d0ef721eSBaptiste Daroussinassumed to have been created with
760d0ef721eSBaptiste Daroussin.Fn history_init .
761d0ef721eSBaptiste Daroussin.It Fn history
762d0ef721eSBaptiste DaroussinPerform operation
763d0ef721eSBaptiste Daroussin.Fa op
764d0ef721eSBaptiste Daroussinon the history list, with optional arguments as needed by the
765d0ef721eSBaptiste Daroussinoperation.
766d0ef721eSBaptiste Daroussin.Fa ev
767d0ef721eSBaptiste Daroussinis changed accordingly to operation.
768d0ef721eSBaptiste DaroussinThe following values for
769d0ef721eSBaptiste Daroussin.Fa op
770d0ef721eSBaptiste Daroussinare supported, along with the required argument list:
771d0ef721eSBaptiste Daroussin.Bl -tag -width 4n
772d0ef721eSBaptiste Daroussin.It Dv H_SETSIZE , Fa "int size"
773d0ef721eSBaptiste DaroussinSet size of history to
774d0ef721eSBaptiste Daroussin.Fa size
775d0ef721eSBaptiste Daroussinelements.
776d0ef721eSBaptiste Daroussin.It Dv H_GETSIZE
777d0ef721eSBaptiste DaroussinGet number of events currently in history.
778d0ef721eSBaptiste Daroussin.It Dv H_END
779d0ef721eSBaptiste DaroussinCleans up and finishes with
780d0ef721eSBaptiste Daroussin.Fa h ,
781d0ef721eSBaptiste Daroussinassumed to be created with
782d0ef721eSBaptiste Daroussin.Fn history_init .
783d0ef721eSBaptiste Daroussin.It Dv H_CLEAR
784d0ef721eSBaptiste DaroussinClear the history.
785d0ef721eSBaptiste Daroussin.It Dv H_FUNC , Fa "void *ptr" , Fa "history_gfun_t first" , \
786d0ef721eSBaptiste DaroussinFa "history_gfun_t next" , Fa "history_gfun_t last" , \
787d0ef721eSBaptiste DaroussinFa "history_gfun_t prev" , Fa "history_gfun_t curr" , \
788d0ef721eSBaptiste DaroussinFa "history_sfun_t set" , Fa "history_vfun_t clear" , \
789d0ef721eSBaptiste DaroussinFa "history_efun_t enter" , Fa "history_efun_t add"
790d0ef721eSBaptiste DaroussinDefine functions to perform various history operations.
791d0ef721eSBaptiste Daroussin.Fa ptr
792d0ef721eSBaptiste Daroussinis the argument given to a function when it's invoked.
793d0ef721eSBaptiste Daroussin.It Dv H_FIRST
794d0ef721eSBaptiste DaroussinReturn the first element in the history.
795d0ef721eSBaptiste Daroussin.It Dv H_LAST
796d0ef721eSBaptiste DaroussinReturn the last element in the history.
797d0ef721eSBaptiste Daroussin.It Dv H_PREV
798d0ef721eSBaptiste DaroussinReturn the previous element in the history.
799d0ef721eSBaptiste DaroussinIt is newer than the current one.
800d0ef721eSBaptiste Daroussin.It Dv H_NEXT
801d0ef721eSBaptiste DaroussinReturn the next element in the history.
802d0ef721eSBaptiste DaroussinIt is older than the current one.
803d0ef721eSBaptiste Daroussin.It Dv H_CURR
804d0ef721eSBaptiste DaroussinReturn the current element in the history.
805d0ef721eSBaptiste Daroussin.It Dv H_SET , Fa "int position"
806d0ef721eSBaptiste DaroussinSet the cursor to point to the requested element.
807d0ef721eSBaptiste Daroussin.It Dv H_ADD , Fa "const char *str"
808d0ef721eSBaptiste DaroussinAppend
809d0ef721eSBaptiste Daroussin.Fa str
810d0ef721eSBaptiste Daroussinto the current element of the history, or perform the
811d0ef721eSBaptiste Daroussin.Dv H_ENTER
812d0ef721eSBaptiste Daroussinoperation with argument
813d0ef721eSBaptiste Daroussin.Fa str
814d0ef721eSBaptiste Daroussinif there is no current element.
815d0ef721eSBaptiste Daroussin.It Dv H_APPEND , Fa "const char *str"
816d0ef721eSBaptiste DaroussinAppend
817d0ef721eSBaptiste Daroussin.Fa str
818d0ef721eSBaptiste Daroussinto the last new element of the history.
819d0ef721eSBaptiste Daroussin.It Dv H_ENTER , Fa "const char *str"
820d0ef721eSBaptiste DaroussinAdd
821d0ef721eSBaptiste Daroussin.Fa str
822d0ef721eSBaptiste Daroussinas a new element to the history and, if necessary,
823d0ef721eSBaptiste Daroussinremoving the oldest entry to keep the list to the created size.
824d0ef721eSBaptiste DaroussinIf
825d0ef721eSBaptiste Daroussin.Dv H_SETUNIQUE
826d0ef721eSBaptiste Daroussinhas been called with a non-zero argument, the element
827d0ef721eSBaptiste Daroussinwill not be entered into the history if its contents match
828d0ef721eSBaptiste Daroussinthe ones of the current history element.
829d0ef721eSBaptiste DaroussinIf the element is entered
830d0ef721eSBaptiste Daroussin.Fn history
831d0ef721eSBaptiste Daroussinreturns 1; if it is ignored as a duplicate returns 0.
832d0ef721eSBaptiste DaroussinFinally
833d0ef721eSBaptiste Daroussin.Fn history
834d0ef721eSBaptiste Daroussinreturns \-1 if an error occurred.
835d0ef721eSBaptiste Daroussin.It Dv H_PREV_STR , Fa "const char *str"
836d0ef721eSBaptiste DaroussinReturn the closest previous event that starts with
837d0ef721eSBaptiste Daroussin.Fa str .
838d0ef721eSBaptiste Daroussin.It Dv H_NEXT_STR , Fa "const char *str"
839d0ef721eSBaptiste DaroussinReturn the closest next event that starts with
840d0ef721eSBaptiste Daroussin.Fa str .
841d0ef721eSBaptiste Daroussin.It Dv H_PREV_EVENT , Fa "int e"
842d0ef721eSBaptiste DaroussinReturn the previous event numbered
843d0ef721eSBaptiste Daroussin.Fa e .
844d0ef721eSBaptiste Daroussin.It Dv H_NEXT_EVENT , Fa "int e"
845d0ef721eSBaptiste DaroussinReturn the next event numbered
846d0ef721eSBaptiste Daroussin.Fa e .
847d0ef721eSBaptiste Daroussin.It Dv H_LOAD , Fa "const char *file"
848d0ef721eSBaptiste DaroussinLoad the history list stored in
849d0ef721eSBaptiste Daroussin.Fa file .
850d0ef721eSBaptiste Daroussin.It Dv H_SAVE , Fa "const char *file"
851d0ef721eSBaptiste DaroussinSave the history list to
852d0ef721eSBaptiste Daroussin.Fa file .
853d0ef721eSBaptiste Daroussin.It Dv H_SAVE_FP , Fa "FILE *fp"
854d0ef721eSBaptiste DaroussinSave the history list to the opened
855d0ef721eSBaptiste Daroussin.Ft FILE
856d0ef721eSBaptiste Daroussinpointer
857d0ef721eSBaptiste Daroussin.Fa fp .
858d0ef721eSBaptiste Daroussin.It Dv H_NSAVE_FP , Fa "size_t n" , Fa "FILE *fp"
859d0ef721eSBaptiste DaroussinSave the last
860d0ef721eSBaptiste Daroussin.Ft n
861d0ef721eSBaptiste Daroussinhistory entries to the opened
862d0ef721eSBaptiste Daroussin.Ft FILE
863d0ef721eSBaptiste Daroussinpointer
864d0ef721eSBaptiste Daroussin.Fa fp .
865d0ef721eSBaptiste Daroussin.It Dv H_SETUNIQUE , Fa "int unique"
866d0ef721eSBaptiste DaroussinSet flag that adjacent identical event strings should not be entered
867d0ef721eSBaptiste Daroussininto the history.
868d0ef721eSBaptiste Daroussin.It Dv H_GETUNIQUE
869d0ef721eSBaptiste DaroussinRetrieve the current setting if adjacent identical elements should
870d0ef721eSBaptiste Daroussinbe entered into the history.
871d0ef721eSBaptiste Daroussin.It Dv H_DEL , Fa "int e"
872d0ef721eSBaptiste DaroussinDelete the event numbered
873d0ef721eSBaptiste Daroussin.Fa e .
874d0ef721eSBaptiste DaroussinThis function is only provided for
875d0ef721eSBaptiste Daroussin.Nm readline
876d0ef721eSBaptiste Daroussincompatibility.
877d0ef721eSBaptiste DaroussinThe caller is responsible for free'ing the string in the returned
878d0ef721eSBaptiste Daroussin.Fa HistEvent .
879d0ef721eSBaptiste Daroussin.El
880d0ef721eSBaptiste Daroussin.Pp
881d0ef721eSBaptiste Daroussin.Fn history
882d0ef721eSBaptiste Daroussinreturns >= 0 if the operation
883d0ef721eSBaptiste Daroussin.Fa op
884d0ef721eSBaptiste Daroussinsucceeds.
885d0ef721eSBaptiste DaroussinOtherwise, \-1 is returned and
886d0ef721eSBaptiste Daroussin.Fa ev
887d0ef721eSBaptiste Daroussinis updated to contain more details about the error.
888d0ef721eSBaptiste Daroussin.El
889d0ef721eSBaptiste Daroussin.Sh TOKENIZATION FUNCTIONS
890d0ef721eSBaptiste DaroussinThe tokenization functions use a common data structure,
891d0ef721eSBaptiste Daroussin.Fa Tokenizer ,
892d0ef721eSBaptiste Daroussinwhich is created by
893d0ef721eSBaptiste Daroussin.Fn tok_init
894d0ef721eSBaptiste Daroussinand freed by
895d0ef721eSBaptiste Daroussin.Fn tok_end .
896d0ef721eSBaptiste Daroussin.Pp
897d0ef721eSBaptiste DaroussinThe following functions are available:
898d0ef721eSBaptiste Daroussin.Bl -tag -width 4n
899d0ef721eSBaptiste Daroussin.It Fn tok_init
900d0ef721eSBaptiste DaroussinInitialize the tokenizer, and return a data structure
901d0ef721eSBaptiste Daroussinto be used by all other tokenizer functions.
902d0ef721eSBaptiste Daroussin.Fa IFS
903d0ef721eSBaptiste Daroussincontains the Input Field Separators, which defaults to
904d0ef721eSBaptiste Daroussin.Aq space ,
905d0ef721eSBaptiste Daroussin.Aq tab ,
906d0ef721eSBaptiste Daroussinand
907d0ef721eSBaptiste Daroussin.Aq newline
908d0ef721eSBaptiste Daroussinif
909d0ef721eSBaptiste Daroussin.Dv NULL .
910d0ef721eSBaptiste Daroussin.It Fn tok_end
911d0ef721eSBaptiste DaroussinClean up and finish with
912d0ef721eSBaptiste Daroussin.Fa t ,
913d0ef721eSBaptiste Daroussinassumed to have been created with
914d0ef721eSBaptiste Daroussin.Fn tok_init .
915d0ef721eSBaptiste Daroussin.It Fn tok_reset
916d0ef721eSBaptiste DaroussinReset the tokenizer state.
917d0ef721eSBaptiste DaroussinUse after a line has been successfully tokenized
918d0ef721eSBaptiste Daroussinby
919d0ef721eSBaptiste Daroussin.Fn tok_line
920d0ef721eSBaptiste Daroussinor
921d0ef721eSBaptiste Daroussin.Fn tok_str
922d0ef721eSBaptiste Daroussinand before a new line is to be tokenized.
923d0ef721eSBaptiste Daroussin.It Fn tok_line
924d0ef721eSBaptiste DaroussinTokenize
925d0ef721eSBaptiste Daroussin.Fa li ,
926d0ef721eSBaptiste DaroussinIf successful, modify:
927d0ef721eSBaptiste Daroussin.Fa argv
928d0ef721eSBaptiste Daroussinto contain the words,
929d0ef721eSBaptiste Daroussin.Fa argc
930d0ef721eSBaptiste Daroussinto contain the number of words,
931d0ef721eSBaptiste Daroussin.Fa cursorc
932d0ef721eSBaptiste Daroussin(if not
933d0ef721eSBaptiste Daroussin.Dv NULL )
934d0ef721eSBaptiste Daroussinto contain the index of the word containing the cursor,
935d0ef721eSBaptiste Daroussinand
936d0ef721eSBaptiste Daroussin.Fa cursoro
937d0ef721eSBaptiste Daroussin(if not
938d0ef721eSBaptiste Daroussin.Dv NULL )
939d0ef721eSBaptiste Daroussinto contain the offset within
940d0ef721eSBaptiste Daroussin.Fa argv[cursorc]
941d0ef721eSBaptiste Daroussinof the cursor.
942d0ef721eSBaptiste Daroussin.Pp
943d0ef721eSBaptiste DaroussinReturns
944d0ef721eSBaptiste Daroussin0 if successful,
945d0ef721eSBaptiste Daroussin\-1 for an internal error,
946d0ef721eSBaptiste Daroussin1 for an unmatched single quote,
947d0ef721eSBaptiste Daroussin2 for an unmatched double quote,
948d0ef721eSBaptiste Daroussinand
949d0ef721eSBaptiste Daroussin3 for a backslash quoted
950d0ef721eSBaptiste Daroussin.Aq newline .
951d0ef721eSBaptiste DaroussinA positive exit code indicates that another line should be read
952d0ef721eSBaptiste Daroussinand tokenization attempted again.
953d0ef721eSBaptiste Daroussin.
954d0ef721eSBaptiste Daroussin.It Fn tok_str
955d0ef721eSBaptiste DaroussinA simpler form of
956d0ef721eSBaptiste Daroussin.Fn tok_line ;
957d0ef721eSBaptiste Daroussin.Fa str
958d0ef721eSBaptiste Daroussinis a NUL terminated string to tokenize.
959d0ef721eSBaptiste Daroussin.El
960d0ef721eSBaptiste Daroussin.
961d0ef721eSBaptiste Daroussin.\"XXX.Sh EXAMPLES
962d0ef721eSBaptiste Daroussin.\"XXX: provide some examples
963d0ef721eSBaptiste Daroussin.Sh SEE ALSO
964d0ef721eSBaptiste Daroussin.Xr sh 1 ,
965d0ef721eSBaptiste Daroussin.Xr signal 3 ,
966d0ef721eSBaptiste Daroussin.Xr termcap 3 ,
967d0ef721eSBaptiste Daroussin.Xr editrc 5 ,
968d0ef721eSBaptiste Daroussin.Xr termcap 5 ,
969d0ef721eSBaptiste Daroussin.Xr editline 7
970d0ef721eSBaptiste Daroussin.Sh HISTORY
971d0ef721eSBaptiste DaroussinThe
972d0ef721eSBaptiste Daroussin.Nm
973d0ef721eSBaptiste Daroussinlibrary first appeared in
974d0ef721eSBaptiste Daroussin.Bx 4.4 .
975d0ef721eSBaptiste Daroussin.Dv CC_REDISPLAY
976d0ef721eSBaptiste Daroussinappeared in
977d0ef721eSBaptiste Daroussin.Nx 1.3 .
978d0ef721eSBaptiste Daroussin.Dv CC_REFRESH_BEEP ,
979d0ef721eSBaptiste Daroussin.Dv EL_EDITMODE
980d0ef721eSBaptiste Daroussinand the readline emulation appeared in
981d0ef721eSBaptiste Daroussin.Nx 1.4 .
982d0ef721eSBaptiste Daroussin.Dv EL_RPROMPT
983d0ef721eSBaptiste Daroussinappeared in
984d0ef721eSBaptiste Daroussin.Nx 1.5 .
985d0ef721eSBaptiste Daroussin.Sh AUTHORS
986d0ef721eSBaptiste Daroussin.An -nosplit
987d0ef721eSBaptiste DaroussinThe
988d0ef721eSBaptiste Daroussin.Nm
989d0ef721eSBaptiste Daroussinlibrary was written by
990d0ef721eSBaptiste Daroussin.An Christos Zoulas .
991d0ef721eSBaptiste Daroussin.An Luke Mewburn
992d0ef721eSBaptiste Daroussinwrote this manual and implemented
993d0ef721eSBaptiste Daroussin.Dv CC_REDISPLAY ,
994d0ef721eSBaptiste Daroussin.Dv CC_REFRESH_BEEP ,
995d0ef721eSBaptiste Daroussin.Dv EL_EDITMODE ,
996d0ef721eSBaptiste Daroussinand
997d0ef721eSBaptiste Daroussin.Dv EL_RPROMPT .
998d0ef721eSBaptiste Daroussin.An Jaromir Dolecek
999d0ef721eSBaptiste Daroussinimplemented the readline emulation.
1000d0ef721eSBaptiste Daroussin.An Johny Mattsson
1001d0ef721eSBaptiste Daroussinimplemented wide-character support.
1002d0ef721eSBaptiste Daroussin.Sh BUGS
1003d0ef721eSBaptiste DaroussinAt this time, it is the responsibility of the caller to
1004d0ef721eSBaptiste Daroussincheck the result of the
1005d0ef721eSBaptiste Daroussin.Dv EL_EDITMODE
1006d0ef721eSBaptiste Daroussinoperation of
1007d0ef721eSBaptiste Daroussin.Fn el_get
1008d0ef721eSBaptiste Daroussin(after an
1009d0ef721eSBaptiste Daroussin.Fn el_source
1010d0ef721eSBaptiste Daroussinor
1011d0ef721eSBaptiste Daroussin.Fn el_parse )
1012d0ef721eSBaptiste Daroussinto determine if
1013d0ef721eSBaptiste Daroussin.Nm
1014d0ef721eSBaptiste Daroussinshould be used for further input.
1015d0ef721eSBaptiste DaroussinI.e.,
1016d0ef721eSBaptiste Daroussin.Dv EL_EDITMODE
1017d0ef721eSBaptiste Daroussinis purely an indication of the result of the most recent
1018d0ef721eSBaptiste Daroussin.Xr editrc 5
1019d0ef721eSBaptiste Daroussin.Ic edit
1020d0ef721eSBaptiste Daroussincommand.
1021