Ligne de lecture GNU - GNU Readline

Ligne de lecture GNU
Heckert GNU white.svg
Auteur(s) original(aux) Brian Fox
Développeur(s) Chet Ramey
Première version 1989 ; il y a 32 ans ( 1989 )
Version stable
8.1 / 7 décembre 2020 ; il y a 10 mois ( 2020-12-07 )
Dépôt
Écrit en C
Taper Une bibliothèque
Licence Licence publique générale GNU
Site Internet tiswww .case .edu /php /chet /readline /rltop .html

GNU Readline est une bibliothèque logicielle qui fournit des fonctionnalités d'édition de ligne et d'historique pour les programmes interactifs avec une interface de ligne de commande , telle que Bash . Il est actuellement maintenu par Chet Ramey dans le cadre du projet GNU .

Il permet aux utilisateurs de déplacer le curseur de texte , de rechercher dans l' historique des commandes , de contrôler un kill ring (une version plus flexible d'un presse-papiers copier/coller) et d'utiliser la complétion de tabulation sur un terminal de texte . En tant que bibliothèque multiplateforme , readline permet aux applications sur divers systèmes d'afficher un comportement d'édition de ligne identique.

Modes d'édition

Readline prend en charge les modes d'édition d'Emacs et de vi, qui déterminent comment les entrées au clavier sont interprétées comme des commandes d'éditeur. Voir Éditeur war#Differences between vi and Emacs .

Raccourcis clavier Emacs

Les raccourcis clavier du mode d'édition d'Emacs proviennent de l' éditeur de texte Emacs .

Sur certains systèmes, Escdoit être utilisé à la place de Alt, car le Altraccourci est en conflit avec un autre raccourci. Par exemple, appuyer sur Alt+ fdans la fenêtre de l' émulateur de terminal de Xfce ne fait pas avancer le curseur d'un mot, mais active "Fichier" dans le menu de la fenêtre de terminal, à moins que cela ne soit désactivé dans les paramètres de l'émulateur.

  • Tab ↹ : Saisie automatique à partir de la position du curseur.
  • Ctrl+ a : Déplace le curseur au début de la ligne (équivalent à la touche Home).
  • Ctrl+ b : Recule le curseur d'un caractère (équivalent à la touche ).
  • Ctrl+ c : Envoie le signal SIGINT via le pseudoterminal à la tâche en cours, qui l'abandonne et la ferme.
  • Ctrl+d
    • Envoie un marqueur EOF, qui (sauf s'il est désactivé par une option) ferme le shell courant (équivalent à la commande exit). (Seulement s'il n'y a pas de texte sur la ligne courante)
    • S'il y a du texte sur la ligne courante, supprime le caractère courant (alors équivalent à la touche Delete).
  • Ctrl+ e : ( fin ) déplace le curseur en fin de ligne (équivalent à la touche End).
  • Ctrl+ f : Avance le curseur d'un caractère (équivalent à la touche ).
  • Ctrl+ g : Annule la recherche inversée et restaure la ligne d'origine.
  • Ctrl+ h : Supprime le caractère précédent (identique au retour arrière).
  • Ctrl+ i : Équivalent à la touche de tabulation.
  • Ctrl+ j : Équivalent à la touche entrée.
  • Ctrl+ k : Efface le contenu de la ligne après le curseur et le copie dans le presse - papiers .
  • Ctrl+ l : Efface le contenu de l'écran (équivalent à la commande clear).
  • Ctrl+ n : ( next ) rappelle la commande suivante (équivalente à la touche ).
  • Ctrl+ o : Exécute la commande trouvée à partir de l'historique et récupère la ligne suivante relative à la ligne actuelle de l'historique pour l'éditer.
  • Ctrl+ p : ( précédente ) rappelle la commande précédente (équivalente à la touche ).
  • Ctrl+ r : (recherche inversée) rappelle la dernière commande incluant les caractères spécifiés. Un second Ctrl+ rrappelle la prochaine commande antérieure qui correspond à la recherche
  • Ctrl+ s : Revenir à la prochaine commande plus récente de la recherche inversée (attention à ne pas l'exécuter depuis un terminal car cette commande lance aussi son XOFF). Si vous avez modifié ce paramètre XOFF, utilisez Ctrl+ qpour revenir.
  • Ctrl+ t : Transpose les deux caractères précédents.
  • Ctrl+ u : Efface le contenu de la ligne avant le curseur et le copie dans le presse - papiers .
  • Ctrl+ v : Si l'entrée suivante est également une séquence de contrôle, tapez-la littéralement (par exemple * Ctrl+ v Ctrl+ htape "^H", un retour arrière littéral.)
  • Ctrl+ w : Efface le mot avant le curseur et le copie dans le presse - papiers .
  • Ctrl+ x Ctrl+ e : Edite la ligne courante dans le programme $EDITOR, ou vi si non défini.
  • Ctrl+ x Ctrl+ r : Lire le contenu du fichier inputrc et incorporer toutes les liaisons ou affectations de variables qui s'y trouvent.
  • Ctrl+ x Ctrl+ u : Annulation incrémentielle, mémorisée séparément pour chaque ligne.
  • Ctrl+ x Ctrl+ v : Affiche les informations de version sur l'instance actuelle de Bash.
  • Ctrl+ x Ctrl+ x : Alterne le curseur avec son ancienne position. (Cx, car x a une forme croisée).
  • Ctrl+ y : ( yank ) ajoute le contenu du presse - papiers à partir de la position du curseur.
  • Ctrl+ z : Envoie le signal SIGTSTP à la tâche en cours, qui la suspend. Pour l'exécuter en arrière-plan, on peut entrer bg. Pour le ramener de l'arrière-plan ou une suspension fg ['process name or job id']( premier plan ) peut être émise.
  • Ctrl+ _ : Annulation incrémentielle, mémorisée séparément pour chaque ligne.
  • Alt+ b : ( vers l'arrière ) fait reculer le curseur d'un mot.
  • Alt+ c : Met en majuscule le caractère sous le curseur et se déplace jusqu'à la fin du mot.
  • Alt+ d : Coupe le mot après le curseur.
  • Alt+ f : ( avant ) déplace le curseur d'un mot vers l'avant.
  • Alt+ l : Réduit la casse de chaque caractère de la position du curseur à la fin du mot courant.
  • Alt+ r : Annule les modifications et remet la ligne telle qu'elle était dans l'historique.
  • Alt+ u : Met en majuscule chaque caractère depuis la position du curseur jusqu'à la fin du mot courant.
  • Alt+ . : Insère le dernier argument de la commande précédente (le dernier mot de l'entrée d'historique précédente).

Choix de la GPL comme licence GNU Readline

GNU Readline est connu pour être une bibliothèque de logiciels libres sous licence GNU General Public License (GPL). Les bibliothèques de logiciels libres sont beaucoup plus souvent sous licence GNU Lesser General Public License (LGPL), par exemple, la bibliothèque GNU C , GNU gettext et FLTK . Un développeur d'une application qui choisit de se lier à une bibliothèque sous licence LGPL peut utiliser n'importe quelle licence pour l'application. Mais la liaison à une bibliothèque sous licence GPL telle que Readline nécessite que l' ensemble de l' application résultante combinée soit sous licence GPL lorsqu'elle est distribuée, pour se conformer à la section 5 de la GPL.

Cette licence a été choisie par la FSF dans l'espoir qu'elle inciterait les logiciels à passer à la GPL. Un exemple important d'une application changeant sa licence pour se conformer aux conditions de copyleft de GNU Readline est CLISP , une implémentation de Common Lisp . Initialement publié en 1987, il a changé à la licence GPL en 1992, après un échange de courriels entre un des auteurs originaux de Clisp, Bruno Haible, et Richard Stallman , dans lequel Stallman a soutenu que la mise en relation de readline dans CLISP signifiait que Haible devait re -licence CLISP sous GPL s'il souhaitait diffuser l'implémentation de CLISP qui utilisait readline.

Une autre réponse a été de ne pas l'utiliser dans certains projets, faisant en sorte que la saisie de texte utilise le pilote de terminal Unix primitif pour l'édition.

Bibliothèques alternatives

Des bibliothèques alternatives ont été créées avec d'autres licences afin qu'elles puissent être utilisées par des projets logiciels qui souhaitent implémenter une fonctionnalité d'édition en ligne de commande, mais être publiées avec une licence non GPL.

  • De nombreux systèmes BSD ont un libedit sous licence BSD . MariaDB et PHP permettent à l'utilisateur de choisir au moment de la construction s'il souhaite se lier à GNU Readline ou à libedit. La libreadline de macOS est en fait une cale sur libedit, un arrangement connu sous le nom de editline .
  • linoise est une petite bibliothèque C qui fournit des fonctions d'édition de ligne.
  • Haskeline est une bibliothèque de type readline pour Haskell. Il est principalement écrit pour le compilateur Glasgow Haskell , mais est disponible pour d'autres projets Haskell qui ont également besoin de services d'édition de ligne.

Exemple de code

Le code suivant est en C et doit être lié à la bibliothèque readline en passant un indicateur -lreadline au compilateur :

#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;
}

Fixations

Les langages de programmation non-C qui fournissent des liaisons de langage pour readline incluent

  • readlinemodule intégré de Python ;
  • readlinemodule intégré de Node.js ;
  • le readlinemodule intégré de Ruby ;
  • Le Term::ReadLinemodule tiers de Perl (CPAN) , spécifiquement Term::ReadLine::Gnupour GNU ReadLine.

La prise en charge des alternatives readline diffère selon ces liaisons.

Remarques

Les références

Liens externes