COHERENT manpages

This page displays the COHERENT manpage for readline() [Read and edit a line of input].

List of available manpages
Index


readline() -- Editing Function (libedit)

Read and edit a line of input
char *readline(prompt)
char *prompt;

The function  readline() displays on the standard output  the text to which
prompt points,  then accepts what  the user types.   It lets the  user type
simple,  EMACS-style commands  to edit  what she has  typed; when  the user
types  <return>, readline()  returns  the line  of text  with the  trailing
newline removed.

readline() returns a pointer to  the newly entered line.  This return value
can be passed  to the function add_history(), which adds  it to an internal
``history'' buffer.  The user can  use a command within readline() recall a
saved line, re-edit it, and re-submit it.

readline() returns NULL  when the user types EOF, or  if it cannot allocate
space for  the line  of input.   Otherwise, it returns  the address  of the
edited string that the user input.

Editing Commands

readline() provides  a simple, EMACS-like editing  interface.  You can type
control characters or escape sequences to  edit a line before it is sent to
the calling program, much like the EMACS editing feature of the Korn shell.

readline() recognizes the following editing commands:

<ctrl-A>
        Move the cursor to the beginning of the line.
<ctrl-B>
        Move the cursor one character to the left (backwards).
<ctrl-D>
        Delete the  character  under which  the cursor  is positioned  (the
        ``current character'').
<ctrl-E>
        Move the cursor to end of line.
<ctrl-F>
        Move the cursor one character to the right (forwards).
<ctrl-G>
        Ring the bell.
<ctrl-H>
        Delete  the  character  to  the left  of  the  cursor.   Note  that
        <ctrl-H> is  the  character that  normally is  output by  the
        <backspace> key.
<ctrl-I>
        Complete file name.  Note that <ctrl-I> is the character that
        normally is output by the <tab> key.
<ctrl-J>
        Submit the line  for processing.   Note that <ctrl-J>  is the
        character that normally is output by the <return> key.
<ctrl-K>
        Kill all text from the cursor to end of line.
<ctrl-L>
        Redisplay the line.
<ctrl-M>
        Submit  the  line  for processing.   Note  that  on  some  systems,
        <ctrl-M> is output by the <return> key.
<ctrl-N>
        Get the next line from the history buffer.
<ctrl-P>
        Get the previous line from the history buffer.
<ctrl-R>
        Search backwards through the history buffer for a given string.
<ctrl-T>
        Transpose the character over  the cursor with the  character to its
        left.
<ctrl-V>
        Insert next  character  into the  line,  even if  it  is a  control
        character.  Note that  under MicroEMACS,  this command is  bound to
        <ctrl-Q>.
<ctrl-W>
        Kill (wipe) all text from the cursor to the mark.
<ctrl-X><ctrl-X>
        Move the cursor from  current position to the  mark; reset the mark
        at the previous position of the cursor.
<ctrl-Y>
        Yank back the most recently killed text.
<ctrl-]>c
        Move the cursor forward to next character c.
<ctrl-?>
        Delete the character  under which  the cursor is  positioned.  This
        command is identical with  <ctrl-D>. Note that <ctrl-?>
        is the character that normally is output by the <del> key.
<ctrl-[>
        Begin  an  escape  sequence.   Note   that  <ctrl-[>  is  the
        character that normally is output by the <esc> key.
<esc><ctrl-H>
        Delete the previous word  (the word to the left  of the cursor).  A
        word is delineated by white space.
<esc><del>
        Delete the current word  -- that is, from the cursor  to the end of
        the word as delineated by white space or the end of the line.
<esc><space>
        Set the mark.
<esc>.
        Get the last (or n'th) word from previous line.
<esc>?
        Show possible completions.  This feature is detailed below.
<esc><
        Move the cursor to the beginning of the history buffer.
<esc>>
        Move the cursor to the end of the history buffer.
<esc>B
        Move the cursor backwards (to the left) by one word.
<esc>D
        Delete the word under which the cursor is positioned.
<esc>F
        Move the cursor forward (to the right) by one word.
<esc>L
        Make the current word lower case.
<esc>M
        Toggle displaying  eight-bit  characters  normally (meta-mode),  or
        displaying them prefixed with the string M-.  In the meta-mode, you
        can generate  characters  with  the top  bit  set  by pressing  the
        <alt> key with  an alphanumeric key; this  is interpreted the
        same as <esc><key>.
<esc>U
        Make the current word upper case.
<esc>Y
        Yank back the most recently killed text.
<esc>V
        Show the version of the library libedit.a.
<esc>W
        Make yankable all text from the cursor to the mark.
<esc>n
        Set the argument to integer n.
<esc>C
        Read input from environment variable _C_,  where C is an upper-case
        letter.

Most editing  commands can be given  an argument n, where  n is an integer.
To enter  a numeric  argument, type <esc>,  the number, and  then the
command to execute.  For example,

    <esc> 4 <ctrl-F>

moves the cursor four characters forward.

Note that you can type an editing command on the line of input, not just at
the  beginning.  Likewise,  you  can type  <return>  to submit  a line  for
processing, regardless of where on the line the cursor is positioned.

readline() has  a modest macro facility.  If  you type <esc> followed
by an upper-case letter,  then readline() reads the contents of environment
variable _C_ as if you had typed them at the keyboard.

readline() also  can complete a  file name.  For example,  suppose that the
root directory contains the following files:

    coherent
    coherent.old

If you type

    rm /c

into readline() and then press the <tab> key, readline() completes as
much of the name as it  can -- in this case, by adding oherent. Because the
name  is not  unique, readline()  then beeps.   If you  press <esc>?,
readline()  displays  the  two choices.   If  you  then  enter a  tie-break
character  (in this  case,  `.'), followed  by  the <tab>  character,
readline() completes the file name for you.

Using Line Editing

To include readline()  in your program, simply call it  as you do any other
function.  You must link the library libedit.a into your program.

Example

The following  brief example lets  you enter a  line and edit  it, and then
displays it.

#include <stdlib.h>

extern char *readline();
extern void add_history();

int main(ac, av)
int ac; char *av[];
{
    char *p;

    while ((p = readline ("Enter a line:")) != NULL) {
        (void) printf ("%s\n", p);
        add_history (p);
        free (p);
    }
    return 0;
}

See Also

add_history(),
libedit

Notes

readline()  calls malloc()  to allocate  space for the  text that  the user
enters.  Therefore, an application must call free() to free this space when
it has finished with it.

readline() cannot handle lines longer than 80 characters.

The   original   manual   page   was   written   by  David   W.   Sanderson
<dws@ssec.wisc.edu>.