2008-06-08 03:02:28 +08:00
|
|
|
.TH EDITLINE 3
|
|
|
|
.SH NAME
|
|
|
|
editline \- command-line editing library with history
|
|
|
|
.SH SYNOPSIS
|
2008-06-08 06:32:45 +08:00
|
|
|
.nf
|
2010-07-31 08:27:24 +08:00
|
|
|
.B "char *readline(char *prompt);"
|
2008-06-08 06:32:45 +08:00
|
|
|
.fi
|
2008-06-08 03:02:28 +08:00
|
|
|
.SH DESCRIPTION
|
|
|
|
.I Editline
|
2010-07-31 08:27:24 +08:00
|
|
|
is a library that provides an line-editing interface with history.
|
|
|
|
It is intended to be functionally equivalent with the
|
2008-06-08 03:02:28 +08:00
|
|
|
.I readline
|
|
|
|
library provided by the Free Software Foundation, but much smaller.
|
|
|
|
The bulk of this manual page describes the user interface.
|
|
|
|
.PP
|
|
|
|
The
|
2010-07-31 08:27:24 +08:00
|
|
|
.I readline()
|
|
|
|
function displays the given
|
|
|
|
.I prompt
|
|
|
|
on stdout, waits for user input on stdin and then
|
|
|
|
returns a line of text with the trailing newline removed. The data is returned in a
|
|
|
|
buffer allocated with
|
2008-06-08 03:02:28 +08:00
|
|
|
.IR malloc (3),
|
|
|
|
so the space should be released with
|
|
|
|
.IR free (3)
|
|
|
|
when the calling program is done with it.
|
|
|
|
.PP
|
|
|
|
Each line returned is copied to the internal history list, unless it happens
|
2010-07-31 08:27:24 +08:00
|
|
|
to be equal to the previous line. This is configurable if you are building editline
|
|
|
|
from source.
|
2015-02-01 21:58:17 +08:00
|
|
|
.SS User Interface
|
2010-07-31 08:27:24 +08:00
|
|
|
A program that uses this library provides a simple emacs-like editing interface to
|
|
|
|
its users. A line may be edited before it is sent to the calling program by typing
|
|
|
|
either control characters or escape sequences. A control character, shown as a caret
|
|
|
|
followed by a letter, is typed by holding down the ``control'' key while the letter
|
|
|
|
is typed. For example, ``^A'' is a control-A. An escape sequence is entered by
|
|
|
|
typing the ``escape'' key followed by one or more characters. The escape key is
|
|
|
|
abbreviated as ``ESC''. Note that unlike control keys, case matters in escape
|
|
|
|
sequences; ``ESC\ F'' is not the same as ``ESC\ f''.
|
2008-06-08 03:02:28 +08:00
|
|
|
.PP
|
2010-07-31 08:27:24 +08:00
|
|
|
An editing command may be typed anywhere on the line, not just at the beginning. In
|
|
|
|
addition, a return may also be typed anywhere on the line, not just at the end.
|
2008-06-08 03:02:28 +08:00
|
|
|
.PP
|
|
|
|
Most editing commands may be given a repeat count,
|
|
|
|
.IR n ,
|
|
|
|
where
|
|
|
|
.I n
|
|
|
|
is a number.
|
|
|
|
To enter a repeat count, type the escape key, the number, and then
|
|
|
|
the command to execute.
|
|
|
|
For example, ``ESC\ 4\ ^f'' moves forward four characters.
|
|
|
|
If a command may be given a repeat count then the text ``[n]'' is given at the
|
|
|
|
end of its description.
|
|
|
|
.PP
|
|
|
|
The following control characters are accepted:
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
.ta \w'ESC DEL 'u
|
|
|
|
^A Move to the beginning of the line
|
|
|
|
^B Move left (backwards) [n]
|
|
|
|
^D Delete character [n]
|
|
|
|
^E Move to end of line
|
|
|
|
^F Move right (forwards) [n]
|
|
|
|
^G Ring the bell
|
|
|
|
^H Delete character before cursor (backspace key) [n]
|
|
|
|
^I Complete filename (tab key); see below
|
|
|
|
^J Done with line (return key)
|
|
|
|
^K Kill to end of line (or column [n])
|
|
|
|
^L Redisplay line
|
|
|
|
^M Done with line (alternate return key)
|
|
|
|
^N Get next line from history [n]
|
|
|
|
^P Get previous line from history [n]
|
2010-07-31 08:27:24 +08:00
|
|
|
^R Search backward (forward if [n]) through history for
|
|
|
|
\& text; must start line if text begins with an uparrow
|
2008-06-08 03:02:28 +08:00
|
|
|
^T Transpose characters
|
|
|
|
^V Insert next character, even if it is an edit command
|
|
|
|
^W Wipe to the mark
|
|
|
|
^X^X Exchange current location and mark
|
|
|
|
^Y Yank back last killed text
|
|
|
|
^[ Start an escape sequence (escape key)
|
|
|
|
^]c Move forward to next character ``c''
|
|
|
|
^? Delete character before cursor (delete key) [n]
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.PP
|
|
|
|
The following escape sequences are provided.
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
.ta \w'ESC DEL 'u
|
|
|
|
ESC\ ^H Delete previous word (backspace key) [n]
|
|
|
|
ESC\ DEL Delete previous word (delete key) [n]
|
|
|
|
ESC\ SP Set the mark (space key); see ^X^X and ^Y above
|
|
|
|
ESC\ \. Get the last (or [n]'th) word from previous line
|
2010-07-23 15:54:08 +08:00
|
|
|
ESC\ ? Show possible completions; see below
|
2008-06-08 03:02:28 +08:00
|
|
|
ESC\ < Move to start of history
|
|
|
|
ESC\ > Move to end of history
|
|
|
|
ESC\ b Move backward a word [n]
|
|
|
|
ESC\ d Delete word under cursor [n]
|
|
|
|
ESC\ f Move forward a word [n]
|
|
|
|
ESC\ l Make word lowercase [n]
|
2010-07-31 08:27:24 +08:00
|
|
|
ESC\ m Toggle if 8bit chars display normally or with an
|
|
|
|
\& ``M\-'' prefix
|
2008-06-08 03:02:28 +08:00
|
|
|
ESC\ u Make word uppercase [n]
|
|
|
|
ESC\ y Yank back last killed text
|
|
|
|
ESC\ v Show library version
|
|
|
|
ESC\ w Make area up to mark yankable
|
|
|
|
ESC\ nn Set repeat count to the number nn
|
|
|
|
ESC\ C Read from environment variable ``_C_'', where C is
|
|
|
|
\& an uppercase letter
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.PP
|
|
|
|
The
|
|
|
|
.I editline
|
|
|
|
library has a small macro facility.
|
|
|
|
If you type the escape key followed by an uppercase letter,
|
|
|
|
.IR C ,
|
|
|
|
then the contents of the environment variable
|
|
|
|
.I _C_
|
|
|
|
are read in as if you had typed them at the keyboard.
|
|
|
|
For example, if the variable
|
|
|
|
.I _L_
|
|
|
|
contains the following:
|
2015-02-01 21:58:17 +08:00
|
|
|
.PP
|
2008-06-08 03:02:28 +08:00
|
|
|
.RS
|
|
|
|
^A^Kecho '^V^[[H^V^[[2J'^M
|
|
|
|
.RE
|
2015-02-01 21:58:17 +08:00
|
|
|
.PP
|
2008-06-08 03:02:28 +08:00
|
|
|
Then typing ``ESC L'' will move to the beginning of the line, kill the
|
|
|
|
entire line, enter the echo command needed to clear the terminal (if your
|
|
|
|
terminal is like a VT-100), and send the line back to the shell.
|
|
|
|
.PP
|
|
|
|
The
|
|
|
|
.I editline
|
|
|
|
library also does filename completion.
|
|
|
|
Suppose the root directory has the following files in it:
|
2015-02-01 21:58:17 +08:00
|
|
|
.PP
|
2008-06-08 03:02:28 +08:00
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
.ta \w'core 'u
|
|
|
|
bin vmunix
|
|
|
|
core vmunix.old
|
|
|
|
.fi
|
|
|
|
.RE
|
2015-02-01 21:58:17 +08:00
|
|
|
.PP
|
2008-06-08 03:02:28 +08:00
|
|
|
If you type ``rm\ /v'' and then the tab key.
|
|
|
|
.I Editline
|
|
|
|
will then finish off as much of the name as possible by adding ``munix''.
|
|
|
|
Because the name is not unique, it will then beep.
|
|
|
|
If you type the escape key and a question mark, it will display the
|
|
|
|
two choices.
|
|
|
|
If you then type a period and a tab, the library will finish off the filename
|
|
|
|
for you:
|
2015-02-01 21:58:17 +08:00
|
|
|
.PP
|
2008-06-08 03:02:28 +08:00
|
|
|
.RS
|
|
|
|
.nf
|
2008-06-08 06:32:45 +08:00
|
|
|
.RI "rm /v[TAB]" munix ".[TAB]" old
|
2008-06-08 03:02:28 +08:00
|
|
|
.fi
|
|
|
|
.RE
|
2015-02-01 21:58:17 +08:00
|
|
|
.PP
|
2008-06-08 03:02:28 +08:00
|
|
|
The tab key is shown by ``[TAB]'' and the automatically-entered text
|
|
|
|
is shown in italics.
|
2015-02-01 21:58:17 +08:00
|
|
|
.SH USAGE
|
2010-07-31 08:27:24 +08:00
|
|
|
To include
|
|
|
|
.I readline()
|
|
|
|
in your program, simply call it as you do any other function. Just make sure to link
|
|
|
|
your program with libeditline.
|
2015-02-01 21:58:17 +08:00
|
|
|
.SS Example
|
2010-07-31 08:27:24 +08:00
|
|
|
The following brief example lets you enter a line and edit it, then displays it.
|
|
|
|
.nf
|
|
|
|
.B ""
|
2015-02-01 21:58:17 +08:00
|
|
|
.B #include <stdlib.h>
|
2010-07-31 08:27:24 +08:00
|
|
|
.B ""
|
2015-02-01 21:58:17 +08:00
|
|
|
.B extern char *readline(char *prompt);
|
2010-07-31 08:27:24 +08:00
|
|
|
.B ""
|
2015-02-01 21:58:17 +08:00
|
|
|
.B int main (void)
|
|
|
|
.B {
|
|
|
|
.RS
|
|
|
|
.B char *p;
|
2010-07-31 08:27:24 +08:00
|
|
|
.B ""
|
2015-02-01 21:58:17 +08:00
|
|
|
.B while ((p = readline("CLI>"))) {
|
|
|
|
.RS
|
|
|
|
.B puts(p);
|
|
|
|
.B free(p);
|
|
|
|
.RE
|
|
|
|
.B }
|
|
|
|
.B ""
|
|
|
|
.B return 0;
|
|
|
|
.RE
|
|
|
|
.B }
|
2010-07-31 08:27:24 +08:00
|
|
|
.fi
|
2015-02-01 21:58:17 +08:00
|
|
|
.SH BUGS AND LIMITATIONS
|
|
|
|
Does not handle multiple lines or unicode characters well. See the TODO
|
2010-07-31 08:27:24 +08:00
|
|
|
file in the distribution if you want to help out.
|
2008-06-08 03:02:28 +08:00
|
|
|
.SH AUTHORS
|
2015-02-01 21:58:17 +08:00
|
|
|
The original editline library was created by Simmule R. Turner and Rich
|
|
|
|
$alz. It now exists in several forks: Heimdal, Festival speech tools,
|
|
|
|
Mozilla, Google Gadgets for Linux, and many other places. The original
|
|
|
|
manual page was made by David W. Sanderson. Currently maintained by
|
|
|
|
Joachim Nilsson at http://github.com/troglobit/editline
|