GNU Readline

From Wikipedia, the free encyclopedia
(Redirected from Readline)
Jump to navigation Jump to search

Template:Short description Script error: No such module "Infobox".Template:Template other Script error: No such module "Check for unknown parameters".Script error: No such module "Check for conflicting parameters". GNU Readline is a software library that provides in-line editing and history capabilities for interactive programs with a command-line interface, such as Bash. It is currently maintained by Chet Ramey as part of the GNU Project.

It allows users to move the text cursor, search the command history, control a kill ring (a more flexible version of a copy/paste clipboard) and use tab completion on a text terminal. As a cross-platform library, readline allows applications on various systems to exhibit identical line-editing behavior.

Editing modes

Readline supports both Emacs and vi editing modes, which determine how keyboard input is interpreted as editor commands. See Template:Section link.

Emacs keyboard shortcuts

Emacs editing mode key bindings are taken from the text editor Emacs.

On some systems, Script error: No such module "key". must be used instead of Script error: No such module "key"., because the Script error: No such module "key". shortcut conflicts with another shortcut. For example, pressing Script error: No such module "key". in Xfce's terminal emulator window does not move the cursor forward one word, but activates "File" in the menu of the terminal window, unless that is disabled in the emulator's settings.

  • Script error: No such module "key". : Autocompletes from the cursor position.
  • Script error: No such module "key". : Moves the cursor to the line start (equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : Moves the cursor back one character (equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : Sends the signal SIGINT via pseudoterminal to the current task, which aborts and closes it.Template:Efn
  • Script error: No such module "key".
    • Sends an EOF marker, which (unless disabled by an option) closes the current shell (equivalent to the command exit). (Only if there is no text on the current line)
    • If there is text on the current line, deletes the current character (then equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : (end) moves the cursor to the line end (equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : Moves the cursor forward one character (equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : Abort the reverse search and restore the original line.
  • Script error: No such module "key". : Deletes the previous character (same as backspace).
  • Script error: No such module "key". : Equivalent to the tab key.
  • Script error: No such module "key". : Equivalent to the enter key.
  • Script error: No such module "key". : Clears the line content after the cursor and copies it into the clipboard.
  • Script error: No such module "key". : Clears the screen content (equivalent to the command clear).
  • Script error: No such module "key". : (next) recalls the next command (equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : Executes the found command from history, and fetch the next line relative to the current line from the history for editing.
  • Script error: No such module "key". : (previous) recalls the prior command (equivalent to the key Script error: No such module "key".).
  • Script error: No such module "key". : (reverse search) recalls the last command including the specified characters. A second Script error: No such module "key". recalls the next anterior command that corresponds to the search.
  • Script error: No such module "key". : Go back to the next more recent command of the reverse search (beware to not execute it from a terminal because this command also launches its XOFF). If you changed that XOFF setting, use Script error: No such module "key". to return.
  • Script error: No such module "key". : Transpose the previous two characters.
  • Script error: No such module "key". : Clears the line content before the cursor and copies it into the clipboard.
  • Script error: No such module "key". : If the next input is also a control sequence, type it literally (e. g. * Script error: No such module "key". Script error: No such module "key". types "^H", a literal backspace).
  • Script error: No such module "key". : Clears the word before the cursor and copies it into the clipboard.
  • Script error: No such module "key". Script error: No such module "key". : Edits the current line in the $EDITOR program, or vi if undefined.
  • Script error: No such module "key". Script error: No such module "key". : Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.
  • Script error: No such module "key". Script error: No such module "key". : Incremental undo, separately remembered for each line.
  • Script error: No such module "key". Script error: No such module "key". : Display version information about the current instance of Bash.
  • Script error: No such module "key". Script error: No such module "key". : Alternates the cursor with its old position. (C-x, because x has a crossing shape).
  • Script error: No such module "key". : (yank) adds the clipboard content from the cursor position.
  • Script error: No such module "key". : Sends the signal SIGTSTP to the current task, which suspends it. To execute it in background one can enter bg. To bring it back from background or suspension fg ['process name or job id'] (foreground) can be issued.
  • Script error: No such module "key". : Incremental undo, separately remembered for each line.
  • Script error: No such module "key". : (backward) moves the cursor backward one word.
  • Script error: No such module "key". : Capitalizes the character under the cursor and moves to the end of the word.
  • Script error: No such module "key". : Cuts the word after the cursor.
  • Script error: No such module "key". : (forward) moves the cursor forward one word.
  • Script error: No such module "key". : Lowers the case of every character from the cursor's position to the end of the current word.
  • Script error: No such module "key". : Cancels the changes and puts back the line as it was in the history.
  • Script error: No such module "key". : Capitalizes every character from the cursor's position to the end of the current word.
  • Script error: No such module "key". : Insert the last argument to the previous command (the last word of the previous history entry).

Choice of the GPL as GNU Readline's license

GNU Readline is notable for being a free software library which is licensed under the GNU General Public License (GPL). Free software libraries are far more often licensed under the GNU Lesser General Public License (LGPL), for example, the GNU C Library, GNU gettext and FLTK. A developer of an application who chooses to link to an LGPLv3 licensed library can use any license that does not: "restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications".[1] But linking to a GPLv3 licensed library such as Readline requires the entire combined resulting application to be licensed under the GPLv3 when distributed, to comply with section 5 of the GPL.[2][3]

This licensing was chosen by the FSF on the hopes that it would encourage software to switch to the GPL.[4] An important example of an application changing its licensing to comply with the copyleft conditions of GNU Readline is CLISP, an implementation of Common Lisp. Originally released in 1987, it changed to the GPL license in 1992,[5] after an email exchange between one of CLISP's original authors, Bruno Haible, and Richard Stallman, in which Stallman argued[6] that the linking of readline in CLISP meant that Haible was required to re-license CLISP under the GPL if he wished to distribute the implementation of CLISP which used readline.[7]

Another response has been to not use this in some projects, making text input use the primitive Unix terminal driver for editing.

Alternative libraries

Alternative libraries have been created with other licenses so they can be used by software projects which want to implement command line editing functionality, but be released with a non-GPL license.

Sample code

The following code is in C and must be linked against the readline library by passing a Template:Mono flag to the compiler:

#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

int main()
{
    // Configure readline to auto-complete paths when the tab key is hit.
    rl_bind_key('\t', rl_complete);

    // Enable history
    using_history();

    while (1) {
        // Display prompt and read input
        char* input = readline("prompt> ");

        // Check for EOF.
        if (!input)
            break;

        // Add input to readline history.
        add_history(input);

        // Do stuff...

        // Free buffer that was allocated by readline
        free(input);
    }
    return 0;
}

Bindings

Non-C programming languages that provide language bindings for readline include

  • Python's built-in readline module;
  • Ruby's built-in readline module;[20]
  • Perl's third-party (CPAN) Term::ReadLine module, specifically Term::ReadLine::Gnu for GNU ReadLine.
  • PHP's extension.[21]

Support for readline alternatives differ among these bindings.

Notes

Template:Notelist

References

<templatestyles src="Reflist/styles.css" />

  1. Script error: No such module "citation/CS1".
  2. Script error: No such module "citation/CS1".
  3. Script error: No such module "citation/CS1".
  4. Script error: No such module "citation/CS1".
  5. Script error: No such module "citation/CS1".
  6. Script error: No such module "citation/CS1".
  7. Script error: No such module "citation/CS1".
  8. Script error: No such module "citation/CS1".
  9. Editline Library (libedit)
  10. Script error: No such module "citation/CS1".
  11. Script error: No such module "citation/CS1".
  12. Script error: No such module "citation/CS1".
  13. Script error: No such module "citation/CS1".
  14. Script error: No such module "citation/CS1".
  15. Script error: No such module "citation/CS1".
  16. Script error: No such module "citation/CS1".
  17. Script error: No such module "citation/CS1".
  18. Script error: No such module "citation/CS1".
  19. Script error: No such module "citation/CS1".
  20. Script error: No such module "citation/CS1".
  21. Script error: No such module "citation/CS1".

Script error: No such module "Check for unknown parameters".

External links

Script error: No such module "Portal".

Script error: No such module "Navbox".