GNU readline

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
GNU readline
Entwickler Brian Fox, Chet Ramey
Aktuelle Version 6.2
(13. Februar 2011)
Betriebssystem plattformunabhängig
Programmier­sprache C
Lizenz GNU General Public License
Official website

GNU readline ist eine vom GNU-Projekt erstellte und gewartete Programmbibliothek mit Funktionen zum Bearbeiten von Zeilen. Sie steht unter der GPL und wird in Projekten wie zum Beispiel bash genutzt. Die aktuelle Version ist 6.1, welche nun unter anderem Unterstützung für Multibyte-Zeichen (Unicode) enthält.

Unterstützt ein Programm readline, so bewegt beispielsweise der Druck auf Strgb den Cursor ein Zeichen zurück, Strgf bewegt den Cursor ein Zeichen vorwärts und Strgr durchsucht die Befehlspuffer. Diese standardmäßigen Tastenkombinationen stammen von einem der ersten GNU Projekte, dem Texteditor Emacs. Readline unterstützt eine Vielzahl einfacher Funktionen, wie beispielsweise einen sogenannten „kill ring“ (eine flexiblere Variante einer Zwischenablage) und Befehlszeilenergänzung. Da es sich um eine plattformunabhängige Bibliothek handelt, erlaubt readline-Anwendern das gleiche Zeilenbearbeitungsverhalten auf verschiedenen Betriebssystemen.

Readline lässt sich mit Hilfe einer Konfigurationsdatei anpassen, die für den Benutzer gilt (~/.inputrc) oder programmspezifisch sein kann. In dieser Datei ist es möglich, eigene Tastenkombinationen zu definieren und diverse andere Einstellungen zu ändern.

Die GNU-GPL als Lizenz[Bearbeiten]

Während andere freie Bibliotheken oft unter der LGPL (Library/Lesser GPL) lizenziert sind, steht readline unter der GPL. Ein Programmierer einer proprietären (unfreien) Software darf eine unter der LGPL stehende Bibliothek dynamisch zu seinem Programm linken, eine GPL-Bibliothek allerdings nicht.

Der Grund dafür, dass das GNU-Projekt proprietären Anwendungen das Nutzen der Readline-Bibliothek verbietet, liegt in der GPL-LGPL-Strategie begründet[1]. Weil es (zum Beispiel) ziemlich viele C-Bibliotheken (libc) gibt, hätte es wenig Sinn, das Linken proprietärer Programme gegen die GNU libc (glibc) zu verbieten, da dies die Verbreitung der glibc eher einschränken würde. Readline hingegen ist die einzige Bibliothek ihrer Art. Dadurch, dass sie unter der GPL steht, erhalten freie Programme einen Vorteil gegenüber ihren proprietären Pendants, da sie Readline nutzen dürfen. Im Falle der libc würde es hingegen niemandem einen Vorteil beschaffen, wenn nur freie Programme sie benutzen dürften. Proprietäre Software könnte einfach eine andere C-Bibliothek nutzen. Bei Readline ist dies, wie erwähnt, nicht möglich.

Beispiel in C[Bearbeiten]

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>
 
int main()
{
    char* input, shell_prompt[100];
 
    for(;;) {
	// Configure readline to auto-complete paths when the tab key is hit.
        rl_bind_key('\t', rl_complete);
 
        // Create prompt string from user name and current working directory.
        snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));
 
        // Display prompt and read input (n.b. input must be freed after use)...
        input = readline(shell_prompt);
 
        // Check for EOF.
        if (!input)
            break;
 
        // Add input to history.
        add_history(input);
 
        // Do stuff...
 
        // Free input.
        free(input);
    }
}

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Why Not LGPL