Línea de lectura GNU - GNU Readline

Línea de lectura GNU
Heckert GNU blanco.svg
Autor (es) original (es) Brian Fox
Desarrollador (es) Chet Ramey
Versión inicial 1989 ; Hace 32 años ( 1989 )
Lanzamiento estable
8.1 / 7 de diciembre de 2020 ; Hace 10 meses ( 07/12/2020 )
Repositorio
Escrito en C
Escribe Biblioteca
Licencia Licencia pública general GNU
Sitio web tiswww .case .edu / php / chet / readline / rltop .html

GNU Readline es una biblioteca de software que proporciona capacidades de historial y edición de línea para programas interactivos con una interfaz de línea de comandos , como Bash . Actualmente es mantenido por Chet Ramey como parte del Proyecto GNU .

Permite a los usuarios mover el cursor de texto , buscar en el historial de comandos , controlar un kill ring (una versión más flexible de un portapapeles de copiar / pegar) y usar la compleción de tabulación en un terminal de texto . Como biblioteca multiplataforma , readline permite que las aplicaciones en varios sistemas exhiban un comportamiento de edición de línea idéntico.

Modos de edición

Readline admite los modos de edición Emacs y vi, que determinan cómo se interpreta la entrada del teclado como comandos del editor. Consulte Editor war # Diferencias entre vi y Emacs .

Atajos de teclado de Emacs

Las combinaciones de teclas del modo de edición de Emacs se toman del editor de texto Emacs .

En algunos sistemas, Escdebe usarse en lugar de Alt, porque el Altatajo entra en conflicto con otro atajo. Por ejemplo, presionar Alt+ fen la ventana del emulador de terminal de Xfce no mueve el cursor una palabra hacia adelante, sino que activa "Archivo" en el menú de la ventana de terminal, a menos que esté deshabilitado en la configuración del emulador.

  • Tab ↹ : Autocompleta desde la posición del cursor.
  • Ctrl+ a : Mueve el cursor al inicio de la línea (equivalente a la tecla Home).
  • Ctrl+ b : Mueve el cursor un carácter hacia atrás (equivalente a la tecla ).
  • Ctrl+ c : Envía la señal SIGINT a través del pseudoterminal a la tarea actual, que la cancela y la cierra.
  • Ctrl+d
    • Envía un marcador EOF, que (a menos que esté desactivado por una opción) cierra el shell actual (equivalente al comando exit). (Solo si no hay texto en la línea actual)
    • Si hay texto en la línea actual, elimina el carácter actual (entonces equivale a la clave Delete).
  • Ctrl+ e : ( fin ) mueve el cursor al final de la línea (equivalente a la tecla End).
  • Ctrl+ f : Mueve el cursor un carácter hacia adelante (equivalente a la tecla ).
  • Ctrl+ g : Cancela la búsqueda inversa y restaura la línea original.
  • Ctrl+ h : Elimina el carácter anterior (igual que el retroceso).
  • Ctrl+ i : Equivalente a la tecla de tabulación.
  • Ctrl+ j : Equivalente a la tecla enter.
  • Ctrl+ k : Borra el contenido de la línea después del cursor y lo copia en el portapapeles .
  • Ctrl+ l : Borra el contenido de la pantalla (equivalente al comando clear).
  • Ctrl+ n : ( siguiente ) recuerda el siguiente comando (equivalente a la tecla ).
  • Ctrl+ o : Ejecuta el comando encontrado del historial y recupera la siguiente línea relativa a la línea actual del historial para editarla.
  • Ctrl+ p : ( anterior ) recuerda el comando anterior (equivalente a la tecla ).
  • Ctrl+ r : (búsqueda inversa) recupera el último comando que incluye los caracteres especificados. Un segundo Ctrl+ rrecuerda el siguiente comando anterior que corresponde a la búsqueda
  • Ctrl+ s : Regrese al siguiente comando más reciente de la búsqueda inversa (tenga cuidado de no ejecutarlo desde una terminal porque este comando también lanza su XOFF). Si cambió esa configuración XOFF, use Ctrl+ qpara regresar.
  • Ctrl+ t : Transpone los dos caracteres anteriores.
  • Ctrl+ u : Borra el contenido de la línea antes del cursor y lo copia en el portapapeles .
  • Ctrl+ v : Si la siguiente entrada también es una secuencia de control, escríbala literalmente (por ejemplo, * Ctrl+ v Ctrl+ hescribe "^ H", un retroceso literal).
  • Ctrl+ w : Borra la palabra antes del cursor y la copia en el portapapeles .
  • Ctrl+ x Ctrl+ e : Edita la línea actual en el programa $ EDITOR, o vi si no está definido.
  • Ctrl+ x Ctrl+ r : Lea el contenido del archivo inputrc e incorpore cualquier enlace o asignación de variable que se encuentre allí.
  • Ctrl+ x Ctrl+ u : Deshacer incremental, recordado por separado para cada línea.
  • Ctrl+ x Ctrl+ v : Muestra información sobre la versión de la instancia actual de Bash.
  • Ctrl+ x Ctrl+ x : Alterna el cursor con su posición anterior. (Cx, porque x tiene forma de cruce).
  • Ctrl+ y : ( tirón ) agrega el contenido del portapapeles desde la posición del cursor.
  • Ctrl+ z : Envía la señal SIGTSTP a la tarea actual, que la suspende. Para ejecutarlo en segundo plano se puede ingresar bg. Para traerlo de vuelta de fondo o suspensión fg ['process name or job id']( primer plano ) se puede emitir.
  • Ctrl+ _ : Deshacer incremental, recordado por separado para cada línea.
  • Alt+ b : ( hacia atrás ) mueve el cursor hacia atrás una palabra.
  • Alt+ c : Pone en mayúscula el carácter debajo del cursor y se mueve al final de la palabra.
  • Alt+ d : Corta la palabra después del cursor.
  • Alt+ f : ( avance ) mueve el cursor una palabra hacia adelante.
  • Alt+ l : Reduce las mayúsculas y minúsculas de cada carácter desde la posición del cursor hasta el final de la palabra actual.
  • Alt+ r : Cancela los cambios y devuelve la línea como estaba en el historial.
  • Alt+ u : Pone en mayúscula todos los caracteres desde la posición del cursor hasta el final de la palabra actual.
  • Alt+ . : Inserta el último argumento del comando anterior (la última palabra de la entrada del historial anterior).

Elección de la GPL como licencia de GNU Readline

GNU Readline se destaca por ser una biblioteca de software libre con licencia de GNU General Public License (GPL). Las bibliotecas de software libre se licencian con mucha más frecuencia bajo la GNU Lesser General Public License (LGPL), por ejemplo, GNU C Library , GNU gettext y FLTK . Un desarrollador de una aplicación que elige vincularse a una biblioteca con licencia LGPL puede usar cualquier licencia para la aplicación. Pero la vinculación a una biblioteca con licencia GPL , como Readline, requiere que toda la aplicación resultante combinada tenga la licencia GPL cuando se distribuya, para cumplir con la sección 5 de la GPL.

Esta licencia fue elegida por la FSF con la esperanza de que alentaría al software a cambiar a la GPL. Un ejemplo importante de una aplicación que cambia su licencia para cumplir con las condiciones de copyleft de GNU Readline es CLISP , una implementación de Common Lisp . Lanzado originalmente en 1987, cambió a la licencia GPL en 1992, después de un intercambio de correo electrónico entre uno de los autores originales de CLISP, Bruno Haible, y Richard Stallman , en el que Stallman argumentó que la vinculación de readline en CLISP significaba que Haible debía volver a -Licencia CLISP bajo la GPL si desea distribuir la implementación de CLISP que usa readline.

Otra respuesta ha sido no usar esto en algunos proyectos, haciendo que la entrada de texto use el controlador de terminal Unix primitivo para la edición.

Bibliotecas alternativas

Se han creado bibliotecas alternativas con otras licencias para que puedan ser utilizadas por proyectos de software que deseen implementar la funcionalidad de edición de línea de comandos, pero que se publiquen con una licencia que no sea GPL.

  • Muchos sistemas BSD tienen un libedit con licencia BSD . MariaDB y PHP permiten al usuario seleccionar en el momento de la compilación si desea vincular con GNU Readline o con libedit. macOS 's libreadline es en realidad una cuña sobre libedit, una disposición conocida como editline .
  • linenoise es una pequeña biblioteca de C que proporciona funciones de edición de líneas.
  • Haskeline es una biblioteca tipo readline para Haskell. Está escrito principalmente para el compilador Glasgow Haskell , pero está disponible para otros proyectos Haskell que también necesitan servicios de edición de líneas.

Código de muestra

El siguiente código está en C y debe vincularse con la biblioteca readline pasando una marca -lreadline al compilador:

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

Fijaciones

Los lenguajes de programación no C que proporcionan enlaces de lenguaje para readline incluyen

  • readlineMódulo integrado de Python ;
  • readlineMódulo integrado de Node.js ;
  • readlineMódulo integrado de Ruby ;
  • Term::ReadLineMódulo de terceros de Perl (CPAN) , específicamente Term::ReadLine::Gnupara GNU ReadLine.

El soporte para las alternativas de readline difiere entre estos enlaces.

Notas

Referencias

enlaces externos