GNU-Readline - GNU Readline
Originalautor(en) | Brian Fox |
---|---|
Entwickler | Chet Ramey |
Erstveröffentlichung | 1989 |
Stabile Version | 8.1 / 7. Dezember 2020
|
Repository | |
Geschrieben in | C |
Typ | Bücherei |
Lizenz | GNU General Public License |
Webseite | tiswww |
GNU Readline ist eine Softwarebibliothek , die Zeilenbearbeitungs- und Verlaufsfunktionen für interaktive Programme mit einer Befehlszeilenschnittstelle wie Bash bietet . Es wird derzeit von Chet Ramey als Teil des GNU-Projekts gepflegt .
Es ermöglicht Benutzern, den Textcursor zu bewegen , den Befehlsverlauf zu durchsuchen , einen Kill-Ring (eine flexiblere Version einer Zwischenablage zum Kopieren/Einfügen) zu steuern und die Tabulatorvervollständigung auf einem Textterminal zu verwenden . Als plattformübergreifende Bibliothek ermöglicht readline Anwendungen auf verschiedenen Systemen ein identisches Zeilenbearbeitungsverhalten zu zeigen.
Bearbeitungsmodi
Readline unterstützt sowohl den Emacs- als auch den vi-Bearbeitungsmodus, der bestimmt, wie Tastatureingaben als Editorbefehle interpretiert werden. Siehe Editor war#Unterschiede zwischen vi und Emacs .
Emacs-Tastaturkürzel
Emacs - Modus Bearbeiten von Tastenbelegungen sind aus dem aufgenommenen Texteditor Emacs .
Auf einigen Systemen Escmuss anstelle von verwendet werden Alt, da die AltVerknüpfung mit einer anderen Verknüpfung kollidiert. Wenn Sie beispielsweise Alt+ fim Terminalemulatorfenster von Xfce drücken , wird der Cursor kein Wort vorwärts bewegt, sondern "Datei" im Menü des Terminalfensters aktiviert, es sei denn, dies ist in den Einstellungen des Emulators deaktiviert.
- Tab ↹ : Automatische Vervollständigung ab der Cursorposition.
- Ctrl+ a : Bewegt den Cursor an den Zeilenanfang (entspricht der Taste Home).
- Ctrl+ b : Bewegt den Cursor um ein Zeichen zurück (entspricht der Taste ←).
- Ctrl+ c : Sendet das Signal SIGINT über Pseudoterminal an die aktuelle Task, die diese abbricht und schließt.
-
Ctrl+d
- Sendet einen EOF-Marker, der (sofern nicht durch eine Option deaktiviert) die aktuelle Shell schließt (entspricht dem Befehl
exit
). (Nur wenn in der aktuellen Zeile kein Text vorhanden ist) - Wenn sich in der aktuellen Zeile Text befindet, wird das aktuelle Zeichen gelöscht (entspricht dann der Taste Delete).
- Sendet einen EOF-Marker, der (sofern nicht durch eine Option deaktiviert) die aktuelle Shell schließt (entspricht dem Befehl
- Ctrl+ e : ( end ) bewegt den Cursor an das Zeilenende (entspricht der Taste End).
- Ctrl+ f : Bewegt den Cursor um ein Zeichen vorwärts (entspricht der Taste →).
- Ctrl+ g : Rückwärtssuche abbrechen und die ursprüngliche Zeile wiederherstellen.
- Ctrl+ h : Löscht das vorherige Zeichen (wie die Rücktaste).
- Ctrl+ i : Entspricht der Tabulatortaste.
- Ctrl+ j : Entspricht der Eingabetaste.
- Ctrl+ k : Löscht den Zeileninhalt nach dem Cursor und kopiert ihn in die Zwischenablage .
-
Ctrl+ l : Löscht den Bildschirminhalt (entspricht dem Befehl
clear
). - Ctrl+ n : ( next ) ruft den nächsten Befehl auf (entspricht der Taste ↓).
- Ctrl+ o : Führt den gefundenen Befehl aus dem Verlauf aus und holt die nächste Zeile relativ zur aktuellen Zeile aus dem Verlauf zum Bearbeiten.
- Ctrl+ p : ( previous ) ruft den vorherigen Befehl auf (entspricht der Taste ↑).
- Ctrl+ r : (Rückwärtssuche) ruft den letzten Befehl einschließlich der angegebenen Zeichen auf. Ein zweites Ctrl+ rruft den nächsten anterioren Befehl auf, der der Suche entspricht
- Ctrl+ s : Gehen Sie zurück zum nächsten neueren Befehl der Rückwärtssuche (achten Sie darauf, ihn nicht von einem Terminal aus auszuführen, da dieser Befehl auch seinen XOFF startet). Wenn Sie diese XOFF-Einstellung geändert haben, verwenden Sie Ctrl+, qum zurückzukehren.
- Ctrl+ t : Transponiert die beiden vorherigen Zeichen.
- Ctrl+ u : Löscht den Zeileninhalt vor dem Cursor und kopiert ihn in die Zwischenablage .
- Ctrl+ v : Wenn die nächste Eingabe auch eine Kontrollsequenz ist, geben Sie sie wörtlich ein (zB * Ctrl+ v Ctrl+ hgibt "^H" ein, ein wörtliches Backspace.)
- Ctrl+ w : Löscht das Wort vor dem Cursor und kopiert es in die Zwischenablage .
- Ctrl+ x Ctrl+ e : Bearbeitet die aktuelle Zeile im $EDITOR-Programm oder vi, wenn nicht definiert.
- Ctrl+ x Ctrl+ r : Liest den Inhalt der inputrc-Datei ein und bindet alle dort gefundenen Bindings oder Variablenzuweisungen ein.
- Ctrl+ x Ctrl+ u : Inkrementelles Rückgängigmachen, das für jede Zeile separat gespeichert wird.
- Ctrl+ x Ctrl+ v : Versionsinformationen zur aktuellen Bash-Instanz anzeigen.
- Ctrl+ x Ctrl+ x : Wechselt den Cursor mit seiner alten Position. (Cx, weil x eine Kreuzungsform hat).
- Ctrl+ y : ( yank ) fügt den Inhalt der Zwischenablage ab der Cursorposition hinzu.
-
Ctrl+ z : Sendet das Signal SIGTSTP an die aktuelle Task, die diese anhält. Um es im Hintergrund auszuführen, kann man eingeben
bg
. Um es aus dem Hintergrund zurückzuholen oder aufzuhängenfg ['process name or job id']
( Vordergrund ) kann ausgestellt werden. - Ctrl+ _ : Inkrementelles Rückgängigmachen, das für jede Zeile separat gespeichert wird.
- Alt+ b : ( rückwärts ) bewegt den Cursor um ein Wort zurück.
- Alt+ c : Schreibt das Zeichen unter dem Cursor groß und bewegt sich zum Ende des Wortes.
- Alt+ d : Schneidet das Wort nach dem Cursor ab.
- Alt+ f : ( vorwärts ) bewegt den Cursor um ein Wort vorwärts.
- Alt+ l : Verringert die Groß-/Kleinschreibung jedes Zeichens von der Cursorposition bis zum Ende des aktuellen Wortes.
- Alt+ r : Bricht die Änderungen ab und setzt die Zeile so zurück, wie sie im Verlauf war.
- Alt+ u : Schreibt jedes Zeichen von der Cursorposition bis zum Ende des aktuellen Wortes groß.
- Alt+ . : Fügt das letzte Argument zum vorherigen Befehl ein (das letzte Wort des vorherigen Verlaufseintrags).
Wahl der GPL als Lizenz von GNU Readline
GNU Readline zeichnet sich als freie Softwarebibliothek aus, die unter der GNU General Public License (GPL) lizenziert ist. Freie Softwarebibliotheken werden viel häufiger unter der GNU Lesser General Public License (LGPL) lizenziert, zum Beispiel die GNU C Library , GNU gettext und FLTK . Ein Entwickler einer Anwendung, der sich für eine Verknüpfung mit einer LGPL-lizenzierten Bibliothek entscheidet, kann eine beliebige Lizenz für die Anwendung verwenden. Das Verknüpfen mit einer GPL- lizenzierten Bibliothek wie Readline erfordert jedoch, dass die gesamte kombinierte resultierende Anwendung bei der Verteilung unter der GPL lizenziert wird, um Abschnitt 5 der GPL zu erfüllen.
Diese Lizenzierung wurde von der FSF in der Hoffnung gewählt, dass sie Software zum Umstieg auf die GPL ermutigen würde. Ein wichtiges Beispiel für eine Anwendung, die ihre Lizenzierung ändert, um den Copyleft-Bedingungen von GNU Readline zu entsprechen, ist CLISP , eine Implementierung von Common Lisp . Ursprünglich im Jahr 1987 veröffentlicht, wechselte er zur GPL - Lizenz im Jahr 1992, nach einem E - Mail - Austausch zwischen einem der CLISP ursprünglichen Autoren, Bruno Haible und Richard Stallman , in denen Stallman argumentiert , dass die Verknüpfung von Readline- in CLISP bedeutete , dass Haible zu erforderlich war , re - CLISP unter der GPL lizenzieren, wenn er die CLISP-Implementierung verteilen möchte, die readline verwendet.
Eine andere Reaktion bestand darin, dies in einigen Projekten nicht zu verwenden, wodurch die Texteingabe den primitiven Unix-Terminaltreiber zum Bearbeiten verwendet.
Alternative Bibliotheken
Alternative Bibliotheken wurden mit anderen Lizenzen erstellt, damit sie von Softwareprojekten verwendet werden können, die Befehlszeilenbearbeitungsfunktionen implementieren möchten, aber mit einer Nicht-GPL-Lizenz veröffentlicht werden.
- Viele BSD-Systeme haben eine BSD-lizenzierte libedit . MariaDB und PHP ermöglichen es dem Benutzer, zur Build-Zeit auszuwählen, ob er mit GNU Readline oder mit libedit verlinken möchte. macOS ‚s libreadline ist eigentlich eine Beilagscheibe über libedit eine Anordnung als bekannt editline .
- lineoise ist eine winzige C-Bibliothek, die Zeilenbearbeitungsfunktionen bietet.
- Haskeline ist eine Readline-ähnliche Bibliothek für Haskell. Es wurde hauptsächlich für den Glasgow Haskell Compiler geschrieben , steht aber auch anderen Haskell-Projekten zur Verfügung, die Zeilenbearbeitungsdienste benötigen.
Beispielcode
Der folgende Code ist in C und muss mit der readline-Bibliothek verknüpft werden, indem ein -lreadline- Flag an den Compiler übergeben wird:
#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);
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;
}
Bindungen
Nicht-C-Programmiersprachen, die Sprachbindungen für Readline bereitstellen, umfassen
- Pythons integriertes
readline
Modul; - integriertes
readline
Modul von Node.js ; - Rubys eingebautes
readline
Modul; - Das Drittanbietermodul (CPAN) von Perl
Term::ReadLine
, speziellTerm::ReadLine::Gnu
für GNU ReadLine.
Die Unterstützung für Readline-Alternativen unterscheidet sich zwischen diesen Bindungen.