GNU-Readline - GNU Readline

GNU-Readline
Heckert GNU white.svg
Originalautor(en) Brian Fox
Entwickler Chet Ramey
Erstveröffentlichung 1989 ; Vor 32 Jahren ( 1989 )
Stabile Version
8.1 / 7. Dezember 2020 ; vor 10 Monaten ( 2020-12-07 )
Repository
Geschrieben in C
Typ Bücherei
Lizenz GNU General Public License
Webseite tiswww .case .edu /php /chet /readline /rltop .html

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).
  • 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ängen fg ['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 readlineModul;
  • integriertes readlineModul von Node.js ;
  • Rubys eingebautes readlineModul;
  • Das Drittanbietermodul (CPAN) von Perl Term::ReadLine, speziell Term::ReadLine::Gnufür GNU ReadLine.

Die Unterstützung für Readline-Alternativen unterscheidet sich zwischen diesen Bindungen.

Anmerkungen

Verweise

Externe Links