stringtranslate.com

Línea de lectura GNU

GNU Readline es una biblioteca de software que ofrece funciones de edición en línea e historial para programas interactivos con una interfaz de línea de comandos , como Bash . Actualmente, Chet Ramey la mantiene como parte del Proyecto GNU .

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

Modos de edición

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 .

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, 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

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.

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

El soporte para alternativas de readline difiere entre estos enlaces.

Notas

  1. ^ GPL-3.0 o posterior desde la versión 6.0 (2009-02-20).
  2. ^ GPL-2.0 o posterior desde la versión 2.1 (1997-06-05) hasta la versión 5.2 (2006-10-11).
  3. ^ GPL-1.0-o-posterior desde ? hasta la versión 2.0 (1994-08-04).
  4. ^ 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

  1. ^ 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 .
  2. ^ "readline.git - La biblioteca GNU Readline" . Consultado el 7 de agosto de 2024 .
  3. ^ "pty(7) - Página del manual de Linux". man7.org . Consultado el 30 de septiembre de 2021 .
  4. ^ "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 .
  5. ^ "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 .
  6. ^ "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 .
  7. ^ "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 .
  8. ^ "Aviso de copyright de CLISP". Repositorio CLISP. 1992. Consultado el 3 de septiembre de 2011 .
  9. ^ "Por qué CLISP está bajo licencia GPL". Repositorio CLISP. 1992. Consultado el 19 de enero de 2023 .
  10. ^ "Licencia - ¿por qué GNU GPL?". Preguntas frecuentes (con respuestas) sobre CLISP . Equipo CLISP . Consultado el 3 de septiembre de 2011 .
  11. ^ "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)
  12. ^ Biblioteca Editline (libedit)
  13. ^ "MariaDB/server/blob/10.2/BUILD/SETUP.sh". Repositorio MariaDB . Fundación MariaDB . Consultado el 24 de octubre de 2017 .
  14. ^ "php/php-src/tree/master/ext/readline". Repositorio PHP . The PHP Group . Consultado el 24 de octubre de 2017 .
  15. ^ Sanfilippo, Salvatore (10 de mayo de 2020). "antirez/linenoise". GitHub .
  16. ^ "Aplicaciones y bibliotecas". Wiki de Haskell . haskell.org . Consultado el 24 de octubre de 2017 .
  17. ^ 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 .
  18. ^ "PowerShell/PSReadLine: una implementación de readline inspirada en bash para PowerShell". Repositorio PSReadLine . Consultado el 20 de diciembre de 2023 .
  19. ^ "Módulo: Readline (Ruby 3.0.2)".

Enlaces externos