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