Readline admite los modos de edición de Emacs y vi, que determinan cómo se interpreta la entrada del teclado como comandos del editor. Consulte Editor war § Comparación .
En algunos sistemas, Escse debe utilizar en lugar de , porque el acceso directo entra en conflicto con otro acceso directo. Por ejemplo, al presionar + en la ventana del emulador de terminal de Xfce no se mueve el cursor una palabra hacia adelante, sino que se activa "Archivo" en el menú de la ventana de terminal, a menos que esté deshabilitado en la configuración del emulador.AltAltAltf
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 vía pseudoterminal a la tarea actual, que la aborta y la cierra. [d]
Ctrl+d
Envía un marcador EOF que (a menos que esté deshabilitado 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 tecla ).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 : Anula la búsqueda inversa y restaura la línea original.
Ctrl+ h : Elimina el carácter anterior (igual que la tecla de 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 en el historial y obtiene 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 + recupera el siguiente comando anterior que corresponde a la búsquedaCtrlr
Ctrl+ s : Regresa al siguiente comando más reciente de la búsqueda inversa (ten cuidado de no ejecutarlo desde una terminal porque este comando también lanza su XOFF). Si cambiaste la configuración de XOFF, usa + para regresar.Ctrlq
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, * + + escribe "^H", un retroceso literal).CtrlvCtrlh
Ctrl+ w : Borra la palabra antes del cursor y la copia en el portapapeles .
Ctrl+ + : Edita la línea actual en el programa $EDITOR, o vi si no está definido.xCtrle
Ctrl+ + : Lee el contenido del archivo inputrc e incorpora cualquier enlace o asignación de variables que se encuentre allí.xCtrlr
Ctrl+ + : Deshacer incremental, recordado por separado para cada línea.xCtrlu
Ctrl++ : Muestra información de la versión de la instancia actual de Bash.xCtrlv
Ctrl+ + : Alterna el cursor con su posición anterior. (Cx, porque x tiene forma de cruz).xCtrlx
Ctrl+ y : (yank) agrega el contenido del portapapeles desde la posición del cursor.
Ctrl+ z : Envía la señal SIGTSTP a la tarea actual, la cual la suspende. Para ejecutarla en segundo plano se puede ingresar bg. Para recuperarla del estado de segundo plano 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 una palabra hacia atrás.
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 : (adelante) mueve el cursor una palabra hacia adelante.
Alt+ l : Reduce el tamaño de cada carácter desde la posición del cursor hasta el final de la palabra actual.
Alt+ r : Cancela los cambios y vuelve a colocar la línea como estaba en el historial.
Alt+ u : Pone en mayúscula cada carácter 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 es conocida por ser una biblioteca de software libre que se encuentra bajo la Licencia Pública General GNU (GPL). Las bibliotecas de software libre se encuentran con mucha más frecuencia bajo la Licencia Pública General Reducida GNU (LGPL), por ejemplo, la Biblioteca C GNU , GNU gettext y FLTK . Un desarrollador de una aplicación que elija enlazar a una biblioteca con licencia LGPLv3 puede utilizar cualquier licencia que no "restringa la modificación de las partes de la Biblioteca contenidas en el Trabajo Combinado y la ingeniería inversa para depurar dichas modificaciones". [4] Pero enlazar a una biblioteca con licencia GPLv3 como Readline requiere que toda la aplicación resultante combinada esté licenciada bajo la GPLv3 cuando se distribuya, para cumplir con la sección 5 de la GPL. [5] [6]
La FSF eligió esta licencia con la esperanza de que alentara al software a cambiarse a la GPL. [7] Un ejemplo importante de una aplicación que cambió su licencia para cumplir con las condiciones de copyleft de GNU Readline es CLISP , una implementación de Common Lisp . Lanzada originalmente en 1987, cambió a la licencia GPL en 1992, [8] después de un intercambio de correos electrónicos entre uno de los autores originales de CLISP, Bruno Haible, y Richard Stallman , en el que Stallman argumentó [9] que el enlace de readline en CLISP significaba que Haible estaba obligado a volver a licenciar CLISP bajo la GPL si deseaba distribuir la implementación de CLISP que usaba readline. [10]
Otra respuesta ha sido no usar esto en algunos proyectos, haciendo que la entrada de texto utilice el controlador de terminal Unix primitivo para editar.
Bibliotecas alternativas
Se han creado bibliotecas alternativas con otras licencias para que puedan ser utilizadas por proyectos de software que quieran 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 . [11] [12] MariaDB y PHP permiten al usuario seleccionar en el momento de la compilación si desea vincularse con GNU Readline o con libedit. [13] [14]
linenoise es una pequeña biblioteca C que proporciona funciones de edición de línea. [15]
Haskeline es una biblioteca similar a readline con licencia BSD-3-Clause para Haskell. Está escrita principalmente para el compilador Glasgow Haskell , [16] pero también está disponible para otros proyectos Haskell que necesiten servicios de edición de líneas. [17]
PSReadLine es una implementación de readline con licencia BSD-2-Clause escrita en C# para PowerShell inspirada en bash y GNU Readline [18]
Código de muestra
El siguiente código está en C y debe vincularse con la biblioteca readline pasando un indicador -lreadline al compilador:
#include <stdlib.h> #include <stdio.h> #include <readline/readline.h> #include <readline/history.h>int main () { // Configurar readline para completar automáticamente las rutas cuando se presiona la tecla de tabulación. rl_bind_key ( '\t' , rl_complete );// Habilitar el historial using_history ();mientras ( 1 ) { // Mostrar el mensaje y leer la entrada char * input = readline ( "prompt> " );// Verificar EOF. if ( ! input ) break ;//Agrega entrada al historial de readline. add_history ( input );// Hacer cosas...// Buffer libre que fue asignado por readline free ( entrada ); } return 0 ; }
Encuadernaciones
Los lenguajes de programación distintos de C que proporcionan enlaces de lenguaje para readline incluyen
Módulo incorporado de Python readline;
readlineMódulo integrado de Ruby ; [19]
Term::ReadLineMódulo de terceros de Perl (CPAN) , específicamente Term::ReadLine::Gnupara GNU ReadLine.
El soporte para alternativas de readline difiere entre estos enlaces.
Notas
^ GPL-3.0 o posterior desde la versión 6.0 (2009-02-20).
^ GPL-2.0 o posterior desde la versión 2.1 (1997-06-05) hasta la versión 5.2 (2006-10-11).
^ GPL-1.0-o-posterior desde ? hasta la versión 2.0 (1994-08-04).
^ Una parte de los pseudoterminales o PTY (para Linux), que es evidente a partir de las herramientas de configuración de terminales como stty ; en una distribución típica de Linux, el punto final maestro PTY trata los caracteres especiales como señales que se deben enviar a los esclavos, por ejemplo, SIGINT[3]
Referencias
^ Chet Ramey (26 de septiembre de 2022). «Readline-8.2 Release available» (La versión 8.2 de Readline ya está disponible) . Consultado el 26 de septiembre de 2022 .
^ "readline.git - La biblioteca GNU Readline" . Consultado el 7 de agosto de 2024 .
^ "pty(7) - Página del manual de Linux". man7.org . Consultado el 30 de septiembre de 2021 .
^ "Licencia Pública General Reducida de GNU". Licencia Pública General Reducida de GNU v3.0 - Proyecto GNU . Free Software Foundation. 2007 . Consultado el 3 de septiembre de 2011 .
^ "Licencia Pública General GNU". Licencia Pública General GNU v3.0 - Proyecto GNU . Free Software Foundation. 2007. Consultado el 3 de septiembre de 2011 .
^ "Preguntas frecuentes sobre las licencias GNU". Preguntas frecuentes sobre las licencias GNU - Proyecto GNU . Free Software Foundation. 2010. Consultado el 3 de septiembre de 2011 .
^ "Por qué no deberías usar la GPL menor para tu próxima biblioteca". Por qué no deberías usar la GPL menor para tu próxima biblioteca - Proyecto GNU - Free Software Foundation . Free Software Foundation. 2016 . Consultado el 15 de octubre de 2019 .
^ "Aviso de copyright de CLISP". Repositorio CLISP. 1992. Consultado el 3 de septiembre de 2011 .
^ "Por qué CLISP está bajo licencia GPL". Repositorio CLISP. 1992. Consultado el 19 de enero de 2023 .
^ "Licencia - ¿por qué GNU GPL?". Preguntas frecuentes (con respuestas) sobre CLISP . Equipo CLISP . Consultado el 3 de septiembre de 2011 .
^ "editline(3) - Páginas del manual de NetBSD". NetBSD . Consultado el 13 de septiembre de 2022 . Biblioteca del editor de línea de comandos (libedit, -ledit)
^ Biblioteca Editline (libedit)
^ "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 . The PHP Group . Consultado el 24 de octubre de 2017 .
^ Sanfilippo, Salvatore (10 de mayo de 2020). "antirez/linenoise". GitHub .
^ "Aplicaciones y bibliotecas". Wiki de Haskell . haskell.org . Consultado el 24 de octubre de 2017 .
^ Judah Jacobson. «judah/haskeline: una biblioteca Haskell para la entrada de línea en programas de línea de comandos». Repositorio Haskeline . Consultado el 24 de octubre de 2017 .
^ "PowerShell/PSReadLine: una implementación de readline inspirada en bash para PowerShell". Repositorio PSReadLine . Consultado el 20 de diciembre de 2023 .