fbpx
Wikipedia

GNU Readline

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.

GNU Readline
Original author(s)Brian Fox
Developer(s)Chet Ramey
Initial release1989; 35 years ago (1989)
Stable release
8.2[1]  / 26 September 2022
Repository
  • git.savannah.gnu.org/cgit/readline.git
Written inC
TypeLibrary
License2009: GPL-3.0-or-later[a]
1997: GPL-2.0-or-later[b]
1994: GPL-1.0-or-later[c]
Websitewww.gnu.org/software/readline/ 

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 edit

Readline supports both Emacs and vi editing modes, which determine how keyboard input is interpreted as editor commands. See Editor war § Comparison.

Emacs keyboard shortcuts edit

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

On some systems, Esc must be used instead of Alt, because the Alt shortcut conflicts with another shortcut. For example, pressing Alt+f 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.

  • Tab ↹ : Autocompletes from the cursor position.
  • Ctrl+a : Moves the cursor to the line start (equivalent to the key Home).
  • Ctrl+b : Moves the cursor back one character (equivalent to the key ).
  • Ctrl+c : Sends the signal SIGINT via pseudoterminal to the current task, which aborts and closes it.[d]
  • Ctrl+d
    • 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 Delete).
  • Ctrl+e : (end) moves the cursor to the line end (equivalent to the key End).
  • Ctrl+f : Moves the cursor forward one character (equivalent to the key ).
  • Ctrl+g : Abort the reverse search and restore the original line.
  • Ctrl+h : Deletes the previous character (same as backspace).
  • Ctrl+i : Equivalent to the tab key.
  • Ctrl+j : Equivalent to the enter key.
  • Ctrl+k : Clears the line content after the cursor and copies it into the clipboard.
  • Ctrl+l : Clears the screen content (equivalent to the command clear).
  • Ctrl+n : (next) recalls the next command (equivalent to the key ).
  • Ctrl+o : Executes the found command from history, and fetch the next line relative to the current line from the history for editing.
  • Ctrl+p : (previous) recalls the prior command (equivalent to the key ).
  • Ctrl+r : (reverse search) recalls the last command including the specified characters. A second Ctrl+r recalls the next anterior command that corresponds to the search
  • Ctrl+s : 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 Ctrl+q to return.
  • Ctrl+t : Transpose the previous two characters.
  • Ctrl+u : Clears the line content before the cursor and copies it into the clipboard.
  • Ctrl+v : If the next input is also a control sequence, type it literally (e. g. * Ctrl+v Ctrl+h types "^H", a literal backspace.)
  • Ctrl+w : Clears the word before the cursor and copies it into the clipboard.
  • Ctrl+x Ctrl+e : Edits the current line in the $EDITOR program, or vi if undefined.
  • Ctrl+x Ctrl+r : Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.
  • Ctrl+x Ctrl+u : Incremental undo, separately remembered for each line.
  • Ctrl+x Ctrl+v : Display version information about the current instance of Bash.
  • Ctrl+x Ctrl+x : Alternates the cursor with its old position. (C-x, because x has a crossing shape).
  • Ctrl+y : (yank) adds the clipboard content from the cursor position.
  • Ctrl+z : 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.
  • Ctrl+_ : Incremental undo, separately remembered for each line.
  • Alt+b : (backward) moves the cursor backward one word.
  • Alt+c : Capitalizes the character under the cursor and moves to the end of the word.
  • Alt+d : Cuts the word after the cursor.
  • Alt+f : (forward) moves the cursor forward one word.
  • Alt+l : Lowers the case of every character from the cursor's position to the end of the current word.
  • Alt+r : Cancels the changes and puts back the line as it was in the history.
  • Alt+u : Capitalizes every character from the cursor's position to the end of the current word.
  • Alt+. : 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 edit

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 LGPL licensed library can use any license for the application.[3] But linking to a GPL licensed library such as Readline requires the entire combined resulting application to be licensed under the GPL when distributed, to comply with section 5 of the GPL.[4][5]

This licensing was chosen by the FSF on the hopes that it would encourage software to switch to the GPL.[6] 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,[7] after an email exchange between one of CLISP's original authors, Bruno Haible, and Richard Stallman, in which Stallman argued[8] 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.[9]

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

Alternative libraries edit

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.

  • Many BSD systems have a BSD-licensed libedit.[10] MariaDB and PHP allow for the user to select at build time whether to link with GNU Readline or with libedit.[11][12]
  • linenoise is a tiny C library that provides line editing functions.[13]
  • Haskeline is a BSD-3-Clause licensed readline-like library for Haskell. It is mainly written for the Glasgow Haskell Compiler,[14] but is available to other Haskell projects which need line-editing services as well.[15]
  • PSReadLine is a BSD-2-Clause licensed readline implementation written in C# for PowerShell inspired by bash and GNU Readline[16]

Sample code edit

The following code is in C and must be linked against the readline library by passing a -lreadline 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 edit

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

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

Support for readline alternatives differ among these bindings.

Notes edit

  1. ^ GPL-3.0-or-later since version 6.0 (2009-02-20).
  2. ^ GPL-2.0-or-later from version 2.1 (1997-06-05) until version 5.2 (2006-10-11).
  3. ^ GPL-1.0-or-later from ? until version 2.0 (1994-08-04).
  4. ^ A part of pseudoterminals or PTYs (for Linux), which is evident from the terminal configuration tools such as stty; in typical Linux distribution the PTY master endpoint treats special characters as signals to be sent to slaves e.g.SIGINT[2]

References edit

  1. ^ Chet Ramey (26 September 2022). "Readline-8.2 Release available". Retrieved 26 September 2022.
  2. ^ "pty(7) - Linux manual page". man7.org. Retrieved 2021-09-30.
  3. ^ "GNU Lesser General Public License". The GNU Lesser General Public License v3.0 - GNU Project. Free Software Foundation. 2007. Retrieved 2011-09-03.
  4. ^ "GNU General Public License". The GNU General Public License v3.0 - GNU Project. Free Software Foundation. 2007. Retrieved 2011-09-03.
  5. ^ "Frequently Asked Questions about the GNU licenses". Frequently Asked Questions about the GNU Licenses - GNU Project. Free Software Foundation. 2010. Retrieved 2011-09-03.
  6. ^ "Why you shouldn't use the Lesser GPL for your next library". Why you shouldn't use the Lesser GPL for your next library - GNU Project - Free Software Foundation. Free Software Foundation. 2016. Retrieved 2019-10-15.
  7. ^ "CLISP copyright notice". CLISP repository. 1992. Retrieved 2011-09-03.
  8. ^ "Why CLISP is under GPL". CLISP repository. 1992. Retrieved 2023-01-19.
  9. ^ "License - why GNU GPL?". Frequently Asked Questions (With Answers) about CLISP. CLISP team. Retrieved 2011-09-03.
  10. ^ "editline(3) - NetBSD Manual Pages". NetBSD. Retrieved 2022-09-13. Command Line Editor Library (libedit, -ledit)
  11. ^ "MariaDB/server/blob/10.2/BUILD/SETUP.sh". MariaDB repository. MariaDB Foundation. Retrieved 2017-10-24.
  12. ^ "php/php-src/tree/master/ext/readline". PHP repository. The PHP Group. Retrieved 2017-10-24.
  13. ^ Sanfilippo, Salvatore (10 May 2020). "antirez/linenoise". GitHub.
  14. ^ "Applications and libraries". Haskell wiki. haskell.org. Retrieved 2017-10-24.
  15. ^ Judah Jacobson. "judah/haskeline: A Haskell library for line input in command-line programs". Haskeline repository. Retrieved 2017-10-24.
  16. ^ "PowerShell/PSReadLine: A bash inspired readline implementation for PowerShell". PSReadLine repository. Retrieved 2023-12-20.
  17. ^ "Module: Readline (Ruby 3.0.2)".

External links edit

  • Things You Didn't Know About GNU Readline

readline, software, library, that, provides, line, editing, history, capabilities, interactive, programs, with, command, line, interface, such, bash, currently, maintained, chet, ramey, part, project, original, author, brian, foxdeveloper, chet, rameyinitial, . 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 GNU ReadlineOriginal author s Brian FoxDeveloper s Chet RameyInitial release1989 35 years ago 1989 Stable release8 2 1 26 September 2022Repositorygit wbr savannah wbr gnu wbr org wbr cgit wbr readline wbr gitWritten inCTypeLibraryLicense2009 GPL 3 0 or later a 1997 GPL 2 0 or later b 1994 GPL 1 0 or later c Websitewww wbr gnu wbr org wbr software wbr readline wbr 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 Contents 1 Editing modes 1 1 Emacs keyboard shortcuts 2 Choice of the GPL as GNU Readline s license 2 1 Alternative libraries 3 Sample code 4 Bindings 5 Notes 6 References 7 External linksEditing modes editReadline supports both Emacs and vi editing modes which determine how keyboard input is interpreted as editor commands See Editor war Comparison Emacs keyboard shortcuts edit Emacs editing mode key bindings are taken from the text editor Emacs On some systems Esc must be used instead of Alt because the Alt shortcut conflicts with another shortcut For example pressing Alt f 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 Tab Autocompletes from the cursor position Ctrl a Moves the cursor to the line start equivalent to the key Home Ctrl b Moves the cursor back one character equivalent to the key Ctrl c Sends the signal SIGINT via pseudoterminal to the current task which aborts and closes it d Ctrl d Sends an EOF marker which unless disabled by an option closes the current shell equivalent to the command a href Exit command html title Exit command exit a 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 Delete Ctrl e end moves the cursor to the line end equivalent to the key End Ctrl f Moves the cursor forward one character equivalent to the key Ctrl g Abort the reverse search and restore the original line Ctrl h Deletes the previous character same as backspace Ctrl i Equivalent to the tab key Ctrl j Equivalent to the enter key Ctrl k Clears the line content after the cursor and copies it into the clipboard Ctrl l Clears the screen content equivalent to the command a href Clear Unix html title Clear Unix clear a Ctrl n next recalls the next command equivalent to the key Ctrl o Executes the found command from history and fetch the next line relative to the current line from the history for editing Ctrl p previous recalls the prior command equivalent to the key Ctrl r reverse search recalls the last command including the specified characters A second Ctrl r recalls the next anterior command that corresponds to the search Ctrl s 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 Ctrl q to return Ctrl t Transpose the previous two characters Ctrl u Clears the line content before the cursor and copies it into the clipboard Ctrl v If the next input is also a control sequence type it literally e g Ctrl v Ctrl h types H a literal backspace Ctrl w Clears the word before the cursor and copies it into the clipboard Ctrl x Ctrl e Edits the current line in the EDITOR program or vi if undefined Ctrl x Ctrl r Read in the contents of the inputrc file and incorporate any bindings or variable assignments found there Ctrl x Ctrl u Incremental undo separately remembered for each line Ctrl x Ctrl v Display version information about the current instance of Bash Ctrl x Ctrl x Alternates the cursor with its old position C x because x has a crossing shape Ctrl y yank adds the clipboard content from the cursor position Ctrl z 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 Ctrl Incremental undo separately remembered for each line Alt b backward moves the cursor backward one word Alt c Capitalizes the character under the cursor and moves to the end of the word Alt d Cuts the word after the cursor Alt f forward moves the cursor forward one word Alt l Lowers the case of every character from the cursor s position to the end of the current word Alt r Cancels the changes and puts back the line as it was in the history Alt u Capitalizes every character from the cursor s position to the end of the current word Alt 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 editGNU 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 LGPL licensed library can use any license for the application 3 But linking to a GPL licensed library such as Readline requires the entire combined resulting application to be licensed under the GPL when distributed to comply with section 5 of the GPL 4 5 This licensing was chosen by the FSF on the hopes that it would encourage software to switch to the GPL 6 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 7 after an email exchange between one of CLISP s original authors Bruno Haible and Richard Stallman in which Stallman argued 8 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 9 Another response has been to not use this in some projects making text input use the primitive Unix terminal driver for editing Alternative libraries edit 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 Many BSD systems have a BSD licensed libedit 10 MariaDB and PHP allow for the user to select at build time whether to link with GNU Readline or with libedit 11 12 linenoise is a tiny C library that provides line editing functions 13 Haskeline is a BSD 3 Clause licensed readline like library for Haskell It is mainly written for the Glasgow Haskell Compiler 14 but is available to other Haskell projects which need line editing services as well 15 PSReadLine is a BSD 2 Clause licensed readline implementation written in C for PowerShell inspired by bash and GNU Readline 16 Sample code editThe following code is in C and must be linked against the readline library by passing a lreadline flag to the compiler include lt stdlib h gt include lt stdio h gt include lt readline readline h gt include lt readline history h gt 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 gt 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 editNon C programming languages that provide language bindings for readline include Python s built in readline module Ruby s built in readline module 17 Perl s third party CPAN Term ReadLine module specifically Term ReadLine Gnu for GNU ReadLine Support for readline alternatives differ among these bindings Notes edit GPL 3 0 or later since version 6 0 2009 02 20 GPL 2 0 or later from version 2 1 1997 06 05 until version 5 2 2006 10 11 GPL 1 0 or later from until version 2 0 1994 08 04 A part of pseudoterminals or PTYs for Linux which is evident from the terminal configuration tools such as stty in typical Linux distribution the PTY master endpoint treats special characters as signals to be sent to slaves e g SIGINT 2 References edit Chet Ramey 26 September 2022 Readline 8 2 Release available Retrieved 26 September 2022 pty 7 Linux manual page man7 org Retrieved 2021 09 30 GNU Lesser General Public License The GNU Lesser General Public License v3 0 GNU Project Free Software Foundation 2007 Retrieved 2011 09 03 GNU General Public License The GNU General Public License v3 0 GNU Project Free Software Foundation 2007 Retrieved 2011 09 03 Frequently Asked Questions about the GNU licenses Frequently Asked Questions about the GNU Licenses GNU Project Free Software Foundation 2010 Retrieved 2011 09 03 Why you shouldn t use the Lesser GPL for your next library Why you shouldn t use the Lesser GPL for your next library GNU Project Free Software Foundation Free Software Foundation 2016 Retrieved 2019 10 15 CLISP copyright notice CLISP repository 1992 Retrieved 2011 09 03 Why CLISP is under GPL CLISP repository 1992 Retrieved 2023 01 19 License why GNU GPL Frequently Asked Questions With Answers about CLISP CLISP team Retrieved 2011 09 03 editline 3 NetBSD Manual Pages NetBSD Retrieved 2022 09 13 Command Line Editor Library libedit ledit MariaDB server blob 10 2 BUILD SETUP sh MariaDB repository MariaDB Foundation Retrieved 2017 10 24 php php src tree master ext readline PHP repository The PHP Group Retrieved 2017 10 24 Sanfilippo Salvatore 10 May 2020 antirez linenoise GitHub Applications and libraries Haskell wiki haskell org Retrieved 2017 10 24 Judah Jacobson judah haskeline A Haskell library for line input in command line programs Haskeline repository Retrieved 2017 10 24 PowerShell PSReadLine A bash inspired readline implementation for PowerShell PSReadLine repository Retrieved 2023 12 20 Module Readline Ruby 3 0 2 External links edit nbsp Free and open source software portal Things You Didn t Know About GNU Readline Retrieved from https en wikipedia org w index php title GNU Readline amp oldid 1197971980, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.