]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libedit/editline.3
This commit was generated by cvs2svn to compensate for changes in r79998,
[FreeBSD/FreeBSD.git] / lib / libedit / editline.3
1 .\"     $NetBSD: editline.3,v 1.4 1997/01/14 04:17:23 lukem Exp $
2 .\"
3 .\" Copyright (c) 1997 The NetBSD Foundation, Inc.
4 .\" All rights reserved.
5 .\"
6 .\" This file was contributed to The NetBSD Foundation by Luke Mewburn.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\" 3. All advertising materials mentioning features or use of this software
17 .\"    must display the following acknowledgement:
18 .\"        This product includes software developed by the NetBSD
19 .\"        Foundation, Inc. and its contributors.
20 .\" 4. Neither the name of The NetBSD Foundation nor the names of its
21 .\"    contributors may be used to endorse or promote products derived
22 .\"    from this software without specific prior written permission.
23 .\"
24 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
25 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26 .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27 .\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
28 .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 .\" POSSIBILITY OF SUCH DAMAGE.
35 .\"
36 .\" $FreeBSD$
37 .\"
38 .Dd January 11, 1997
39 .Os
40 .Dt EDITLINE 3
41 .Sh NAME
42 .Nm editline ,
43 .Nm el_init ,
44 .Nm el_end ,
45 .Nm el_reset ,
46 .Nm el_gets ,
47 .Nm el_getc ,
48 .Nm el_push ,
49 .Nm el_parse ,
50 .Nm el_set ,
51 .Nm el_source ,
52 .Nm el_resize ,
53 .Nm el_line ,
54 .Nm el_insertstr ,
55 .Nm el_deletestr ,
56 .Nm el_data_set ,
57 .Nm el_data_get ,
58 .Nm history_init ,
59 .Nm history_end ,
60 .Nm history
61 .Nd line editor and history functions
62 .Sh LIBRARY
63 .Lb libedit
64 .Sh SYNOPSIS
65 .Fd #include <histedit.h>
66 .Ft EditLine *
67 .Fn el_init "const char *prog" "FILE *fin" "FILE *fout"
68 .Ft void
69 .Fn el_end "EditLine *e"
70 .Ft void
71 .Fn el_reset "EditLine *e"
72 .Ft const char *
73 .Fn el_gets "EditLine *e" "int *count"
74 .Ft int
75 .Fn el_getc "EditLine *e" "char *ch"
76 .Ft void
77 .Fn el_push "EditLine *e" "const char *str"
78 .Ft int
79 .Fn el_parse "EditLine *e" "int argc" "char *argv[]"
80 .Ft int
81 .Fn el_set "EditLine *e" "int op" "..."
82 .Ft int
83 .Fn el_source "EditLine *e" "const char *file"
84 .Ft void
85 .Fn el_resize "EditLine *e"
86 .Ft const LineInfo *
87 .Fn el_line "EditLine *e"
88 .Ft int
89 .Fn el_insertstr "EditLine *e" "char *str"
90 .Ft void
91 .Fn el_deletestr "EditLine *e" "int count"
92 .Ft void
93 .Fn el_data_set "EditLine *e" "void *data"
94 .Ft void *
95 .Fn el_data_get "EditLine *e"
96 .Ft History *
97 .Fn history_init
98 .Ft void
99 .Fn history_end "History *h"
100 .Ft const HistEvent *
101 .Fn history "History *h" "int op" "..."
102 .Sh DESCRIPTION
103 The
104 .Nm
105 library provides generic line editing and history functions,
106 similar to those found in
107 .Xr sh 1 .
108 .Pp
109 These functions are available in the
110 .Nm libedit
111 library (which needs the
112 .Nm libtermcap
113 library).
114 Programs should be linked with
115 .Fl ledit ltermcap .
116 .Sh LINE EDITING FUNCTIONS
117 The line editing functions use a common data structure,
118 .Fa EditLine ,
119 which is created by
120 .Fn el_init
121 and freed by
122 .Fn el_end .
123 .Pp
124 The following functions are available:
125 .Bl -tag -width 4n
126 .It Fn el_init
127 Initialise the line editor, and return a data structure
128 to be used by all other line editing functions.
129 .Fa prog
130 is the name of the invoking program, used when reading the
131 .Xr editrc 5
132 file to determine which settings to use.
133 .Fa fin
134 and
135 .Fa fout
136 are the input and output streams (respectively) to use.
137 In this documentation, references to
138 .Dq the tty
139 are actually to this input/output stream combination.
140 .It Fn el_end
141 Clean up and finish with
142 .Fa e ,
143 assumed to have been created with
144 .Fn el_init .
145 .It Fn el_reset
146 Reset the tty and the parser.
147 This should be called after an error which may have upset the tty's
148 state.
149 .It Fn el_gets
150 Read a line from the tty.
151 .Fa count
152 is modified to contain the number of characters read.
153 Returns the line read if successful, or
154 .Dv NULL
155 if no characters were read or if an error occurred.
156 .It Fn el_getc
157 Read a character from the tty.
158 .Fa ch
159 is modified to contain the character read.
160 Returns the number of characters read if successful, -1 otherwise.
161 .It Fn el_push
162 Pushes
163 .Fa str
164 back onto the input stream.
165 This is used by the macro expansion mechanism.
166 Refer to the description of
167 .Ic bind
168 .Fl s
169 in
170 .Xr editrc 5
171 for more information.
172 .It Fn el_parse
173 Parses the
174 .Fa argv
175 array (which is
176 .Fa argc
177 elements in size)
178 to execute builtin
179 .Nm
180 commands.
181 If the command is prefixed with
182 .Dq prog:
183 then
184 .Fn el_parse
185 will only execute the command if
186 .Dq prog
187 matches the
188 .Fa prog
189 argument supplied to
190 .Fn el_init .
191 The return value is
192 -1 if the command is unknown,
193 0 if there was no error or
194 .Dq prog
195 didn't match, or
196 1 if the command returned an error.
197 Refer to
198 .Xr editrc 5
199 for more information.
200 .Pp
201 .Em NOTE :
202 .Va argv[0]
203 may be modified by
204 .Fn el_parse .
205 The colon between
206 .Dq prog
207 and the command,
208 .Ar command ,
209 will be replaced with a NUL
210 .Po
211 .Dq \e0
212 .Pc .
213 .It Fn el_set
214 Set
215 .Nm
216 parameters.
217 .Fa op
218 determines which parameter to set, and each operation has its
219 own parameter list.
220 .Pp
221 The following values for
222 .Fa op
223 are supported, along with the required argument list:
224 .Bl -tag -width 4n
225 .It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)"
226 Define prompt printing function as
227 .Fa f ,
228 which is to return a string that contains the prompt.
229 .It Dv EL_TERMINAL , Fa "const char *type"
230 Define terminal type of the tty to be
231 .Fa type ,
232 or to
233 .Ev TERM
234 if
235 .Fa type
236 is
237 .Dv NULL .
238 .It Dv EL_EDITOR , Fa "const char *mode"
239 Set editing mode to
240 .Fa mode ,
241 which must be one of
242 .Dq emacs
243 or
244 .Dq vi .
245 .It Dv EL_SIGNAL , Fa "int flag"
246 If
247 .Fa flag
248 is non-zero,
249 .Nm
250 will install its own signal handler for the following signals when
251 reading command input:
252 .Dv SIGCONT ,
253 .Dv SIGHUP ,
254 .Dv SIGINT ,
255 .Dv SIGQUIT ,
256 .Dv SIGSTOP ,
257 .Dv SIGTERM ,
258 .Dv SIGTSTP ,
259 and
260 .Dv SIGWINCH .
261 Otherwise, the current signal handlers will be used.
262 .It Dv EL_BIND , Xo
263 .Fa "const char *" ,
264 .Fa "..." ,
265 .Dv NULL
266 .Xc
267 Perform the
268 .Ic bind
269 builtin command.
270 Refer to
271 .Xr editrc 5
272 for more information.
273 .It Dv EL_ECHOTC , Xo
274 .Fa "const char *" ,
275 .Fa "..." ,
276 .Dv NULL
277 .Xc
278 Perform the
279 .Ic echotc
280 builtin command.
281 Refer to
282 .Xr editrc 5
283 for more information.
284 .It Dv EL_SETTC , Xo
285 .Fa "const char *" ,
286 .Fa "..." ,
287 .Dv NULL
288 .Xc
289 Perform the
290 .Ic settc
291 builtin command.
292 Refer to
293 .Xr editrc 5
294 for more information.
295 .It Dv EL_SETTY , Xo
296 .Fa "const char *" ,
297 .Fa "..." ,
298 .Dv NULL
299 .Xc
300 Perform the
301 .Ic setty
302 builtin command.
303 Refer to
304 .Xr editrc 5
305 for more information.
306 .It Dv EL_TELLTC , Xo
307 .Fa "const char *" ,
308 .Fa "..." ,
309 .Dv NULL
310 .Xc
311 Perform the
312 .Ic telltc
313 builtin command.
314 Refer to
315 .Xr editrc 5
316 for more information.
317 .It Dv EL_ADDFN , Xo
318 .Fa "const char *name" ,
319 .Fa "const char *help" ,
320 .Fa "unsigned char (*func)(EditLine *e, int ch)
321 .Xc
322 Add a user defined function,
323 .Fn func ,
324 referred to as
325 .Fa name
326 which is invoked when a key which is bound to
327 .Fa name
328 is entered.
329 .Fa help
330 is a description of
331 .Fa name .
332 At invocation time,
333 .Fa ch
334 is the key which caused the invocation.
335 The return value of
336 .Fn func
337 should be one of:
338 .Bl -tag -width "CC_REDISPLAY"
339 .It Dv CC_NORM
340 Add a normal character.
341 .It Dv CC_NEWLINE
342 End of line was entered.
343 .It Dv CC_EOF
344 EOF was entered.
345 .It Dv CC_ARGHACK
346 Expecting further command input as arguments, do nothing visually.
347 .It Dv CC_REFRESH
348 Refresh display.
349 .It Dv CC_CURSOR
350 Cursor moved, so update and perform
351 .Dv CC_REFRESH .
352 .It Dv CC_REDISPLAY
353 Redisplay entire input line.
354 This is useful if a key binding outputs extra information.
355 .It Dv CC_ERROR
356 An error occurred.
357 Beep, and flush tty.
358 .It Dv CC_FATAL
359 Fatal error, reset tty to known state.
360 .El
361 .It Dv EL_HIST , Xo
362 .Fa "History *(*func)(History *, int op, ...)" ,
363 .Fa "const char *ptr"
364 .Xc
365 Defines which history function to use, which is usually
366 .Fn history .
367 .Fa ptr
368 should be the value returned by
369 .Fn history_init .
370 .El
371 .It Fn el_source
372 Initialise
373 .Nm
374 by reading the contents of
375 .Fa file .
376 .Fn el_parse
377 is called for each line in
378 .Fa file .
379 If
380 .Fa file
381 is
382 .Dv NULL ,
383 try
384 .Pa $HOME/.editrc .
385 Refer to
386 .Xr editrc 5
387 for details on the format of
388 .Fa file .
389 .It Fn el_resize
390 Must be called if the terminal size changes.
391 If
392 .Dv EL_SIGNAL
393 has been set with
394 .Fn el_set ,
395 then this is done automatically.
396 Otherwise, it's the responsibility of the application to call
397 .Fn el_resize
398 on the appropriate occasions.
399 .It Fn el_line
400 Return the editing information for the current line in a
401 .Fa LineInfo
402 structure, which is defined as follows:
403 .Bd -literal
404 typedef struct lineinfo {
405     const char *buffer;    /* address of buffer */
406     const char *cursor;    /* address of cursor */
407     const char *lastchar;  /* address of last character */
408 } LineInfo;
409 .Ed
410 .It Fn el_insertstr
411 Insert
412 .Fa str
413 into the line at the cursor.
414 Returns -1 if
415 .Fa str
416 is empty or won't fit, and 0 otherwise.
417 .It Fn el_deletestr
418 Delete
419 .Fa num
420 characters before the cursor.
421 .It Fn el_data_set
422 Set the user data to
423 .Fa data .
424 .It Fn el_data_get
425 Get the user data.
426 .El
427 .Sh HISTORY LIST FUNCTIONS
428 The history functions use a common data structure,
429 .Fa History ,
430 which is created by
431 .Fn history_init
432 and freed by
433 .Fn history_end .
434 .Pp
435 The following functions are available:
436 .Bl -tag -width 4n
437 .It Fn history_init
438 Initialise the history list, and return a data structure
439 to be used by all other history list functions.
440 .It Fn history_end
441 Clean up and finish with
442 .Fa h ,
443 assumed to have been created with
444 .Fn history_init .
445 .It Fn history
446 Perform operation
447 .Fa op
448 on the history list, with optional arguments as needed by the
449 operation.
450 The following values for
451 .Fa op
452 are supported, along with the required argument list:
453 .Bl -tag -width 4n
454 .It Dv H_EVENT , Fa "int size"
455 Set size of history to
456 .Fa size
457 elements.
458 .It Dv H_END
459 Cleans up and finishes with
460 .Fa h ,
461 assumed to be created with
462 .Fn history_init .
463 .It Dv H_CLEAR
464 Clear the history.
465 .It Dv H_FUNC , Xo
466 .Fa "void *ptr" ,
467 .Fa "history_gfun_t first" ,
468 .Fa "history_gfun_t next" ,
469 .Fa "history_gfun_t last" ,
470 .Fa "history_gfun_t prev" ,
471 .Fa "history_gfun_t curr" ,
472 .Fa "history_vfun_t clear" ,
473 .Fa "history_efun_t enter" ,
474 .Fa "history_efun_t add"
475 .Xc
476 Define functions to perform various history operations.
477 .Fa ptr
478 is the argument given to a function when it's invoked.
479 .It Dv H_FIRST
480 Return the first element in the history.
481 .It Dv H_LAST
482 Return the last element in the history.
483 .It Dv H_PREV
484 Return the previous element in the history.
485 .It Dv H_NEXT
486 Return the next element in the history.
487 .It Dv H_CURR
488 Return the current element in the history.
489 .It Dv H_ADD , Fa "const char *str"
490 Append
491 .Fa str
492 to the current element of the history, or create an element with
493 .Dv H_ENTER
494 if there isn't one.
495 .It Dv H_ENTER , Fa "const char *str"
496 Add
497 .Fa str
498 as a new element to the history, and, if necessary,
499 removing the oldest entry to keep the list to the created size.
500 .It Dv H_PREV_STR , Fa "const char *str"
501 Return the closest previous event that starts with
502 .Fa str .
503 .It Dv H_NEXT_STR , Fa "const char *str"
504 Return the closest next event that starts with
505 .Fa str .
506 .It Dv H_PREV_EVENT , Fa "int e"
507 Return the previous event numbered
508 .Fa e .
509 .It Dv H_NEXT_EVENT , Fa "int e"
510 Return the next event numbered
511 .Fa e .
512 .It Dv H_LOAD , Fa "const char *file"
513 Load the history list stored in
514 .Fa file .
515 .It Dv H_SAVE , Fa "const char *file"
516 Save the history list to
517 .Fa file .
518 .El
519 .El
520 .\"XXX.Sh EXAMPLES
521 .\"XXX: provide some examples
522 .Sh SEE ALSO
523 .Xr sh 1 ,
524 .Xr signal 3 ,
525 .Xr termcap 3 ,
526 .Xr editrc 5
527 .Sh HISTORY
528 The
529 .Nm
530 library first appeared in
531 .Bx 4.4 .
532 .Sh AUTHORS
533 .An -nosplit
534 The
535 .Nm
536 library was written by
537 .An Christos Zoulas ,
538 and this manual was written by
539 .An Luke Mewburn .
540 .Sh BUGS
541 This documentation is probably incomplete.
542 .Pp
543 .Fn el_parse
544 should not modify the supplied
545 .Va argv[0] .
546 .Pp
547 The tokenization functions are not publicly defined in
548 .Li <histedit.h> .