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 .
Autor (es) original (es) | Brian Fox |
---|---|
Desarrollador (es) | Chet Ramey |
Versión inicial | 1989 |
Lanzamiento estable | 8.1 / 7 de diciembre de 2020 |
Repositorio | |
Escrito en | C |
Tipo | Biblioteca |
Licencia | Licencia pública general GNU |
Sitio web | tiswww |
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 la tarea actual, que la aborta y la cierra.
- Ctrl+d
- 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 de la versión sobre 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 recuperarlo del fondo o suspensiónfg ['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. [1] Pero la vinculación a una biblioteca con licencia GPL como Readline requiere que toda la aplicación resultante combinada cuente con la licencia GPL cuando se distribuya, para cumplir con la sección 5 de la GPL. [2] [3]
Esta licencia fue elegida por la FSF con la esperanza de que alentaría al software a cambiar a la GPL. [4] 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, [5] 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ó [6] que la vinculación de readline en CLISP significaba que Haible debía volver a licenciar CLISP bajo la GPL si deseaba distribuir la implementación de CLISP que usaba readline. [7]
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 que el usuario seleccione en el momento de la compilación si desea vincular con GNU Readline o con libedit. [8] [9] macOS 's libreadline es en realidad una cuña sobre libedit, una disposición conocida como editline . [10]
- linenoise es una pequeña biblioteca de C que proporciona funciones de edición de líneas. [11]
- Haskeline es una biblioteca tipo readline para Haskell. Está escrito principalmente para el compilador Glasgow Haskell , [12] pero está disponible para otros proyectos Haskell que también necesitan servicios de edición de líneas. [13]
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 #include #include #include int main () { // Configure readline para autocompletar rutas cuando se presione la tecla de tabulación. rl_bind_key ( '\ t' , rl_complete ); while ( 1 ) { // Mostrar mensaje y leer input char * input = readline ( "prompt>" ); // Verificar EOF. si ( ! entrada ) romper ; // Agregar entrada al historial de readline. add_history ( entrada ); // Hacer cosas... // Búfer libre que fue asignado por readline free ( input ); } return 0 ; }
Fijaciones
Los lenguajes de programación no C que proporcionan enlaces de lenguaje para readline incluyen:
readline
Módulo integrado de Python ;readline
Módulo integrado de Node.js ;readline
Módulo integrado de Ruby ; [14]Term::ReadLine
Módulo de terceros de Perl (CPAN) , específicamenteTerm::ReadLine::Gnu
para GNU ReadLine.
El soporte para las alternativas de readline difiere entre estos enlaces.
notas y referencias
- ^ "Licencia pública general menor GNU" . Licencia pública general reducida GNU v3.0 - Proyecto GNU . Fundación de Software Libre. 2007 . Consultado el 3 de septiembre de 2011 .
- ^ "Licencia pública general GNU" . La Licencia Pública General GNU v3.0 - Proyecto GNU . Fundación de Software Libre. 2007 . Consultado el 3 de septiembre de 2011 .
- ^ "Preguntas frecuentes sobre las licencias GNU" . Preguntas frecuentes sobre las licencias GNU - Proyecto GNU . Fundación de Software Libre. 2010 . Consultado el 3 de septiembre de 2011 .
- ^ "Por qué no debería utilizar la GPL menor para su próxima biblioteca" . Por qué no debería usar la GPL menor para su próxima biblioteca - Proyecto GNU - Free Software Foundation . Fundación de Software Libre. 2016 . Consultado el 15 de octubre de 2019 .
- ^ "Aviso de derechos de autor de CLISP" . Repositorio CLISP. 1992 . Consultado el 3 de septiembre de 2011 .
- ^ "Por qué CLISP está bajo GPL" . Repositorio CLISP. 1992 . Consultado el 3 de septiembre de 2011 .
- ^ "Licencia: ¿por qué GNU GPL?" . Preguntas frecuentes (con respuestas) sobre CLISP . Equipo CLISP . Consultado el 3 de septiembre de 2011 .
- ^ "MariaDB / server / blob / 10.2 / BUILD / SETUP.sh" . Repositorio MariaDB . Fundación MariaDB . Consultado el 24 de octubre de 2017 .
- ^ "php / php-src / tree / master / ext / readline" . Repositorio PHP . El Grupo PHP . Consultado el 24 de octubre de 2017 .
- ^ Nilsson, Joachim (5 de mayo de 2020). "troglobit / editline" .
- ^ Sanfilippo, Salvatore (10 de mayo de 2020). "antirez / linenoise" .
- ^ "Aplicaciones y bibliotecas" . Wiki de Haskell . haskell.org . Consultado el 24 de octubre de 2017 .
- ^ Judá Jacobson. "judah / haskeline: una biblioteca Haskell para entrada de línea en programas de línea de comandos" . Repositorio Haskeline . Consultado el 24 de octubre de 2017 .
- ^ https://ruby-doc.org/stdlib/libdoc/readline/rdoc/Readline.html
enlaces externos
- Página de inicio de GNU readline
- Cosas que no sabías sobre GNU Readline