stringtranslate.com

Линия чтения GNU

GNU Readline — это программная библиотека , которая обеспечивает возможности оперативного редактирования и истории для интерактивных программ с интерфейсом командной строки , таких как Bash . В настоящее время его поддерживает Чет Рэми как часть проекта GNU .

Он позволяет пользователям перемещать текстовый курсор , выполнять поиск в истории команд , управлять кольцом уничтожения (более гибкая версия буфера обмена копирования/вставки) и использовать завершение табуляции на текстовом терминале . Будучи кросс-платформенной библиотекой, readline позволяет приложениям в различных системах демонстрировать одинаковое поведение при редактировании строк.

Режимы редактирования

Readline поддерживает режимы редактирования Emacs и vi, которые определяют, как ввод с клавиатуры интерпретируется как команды редактора. См. Editor war § Сравнение .

Сочетания клавиш Emacs

Привязки клавиш режима редактирования Emacs взяты из текстового редактора Emacs .

В некоторых системах Escнеобходимо использовать вместо , поскольку ярлык конфликтует с другим ярлыком. Например, нажатие + в окне эмулятора терминала Xfce не перемещает курсор вперед на одно слово, а активирует «Файл» в меню окна терминала, если это не отключено в настройках эмулятора.AltAltAltf

Выбор GPL в качестве лицензии GNU Readline

GNU Readline примечателен тем, что является библиотекой свободного программного обеспечения , лицензируемой по лицензии GNU General Public License (GPL). Библиотеки свободного программного обеспечения гораздо чаще лицензируются по лицензии GNU Lesser General Public License (LGPL), например, библиотека GNU C , GNU gettext и FLTK . Разработчик приложения, выбравший ссылку на библиотеку с лицензией LGPL, может использовать для приложения любую лицензию. [3] Но для подключения к библиотеке, лицензируемой GPL, такой как Readline, требуется, чтобы все объединенное полученное приложение при распространении было лицензировано по GPL, чтобы соответствовать разделу 5 GPL. [4] [5]

Это лицензирование было выбрано FSF в надежде, что оно побудит программное обеспечение перейти на GPL. [6] Важным примером изменения лицензии приложения для соответствия условиям авторского лева GNU Readline является CLISP , реализация Common Lisp . Первоначально выпущенная в 1987 году, она была изменена на лицензию GPL в 1992 году [7] после обмена электронными письмами между одним из первоначальных авторов CLISP, Бруно Хейбле, и Ричардом Столлманом , в котором Столлман утверждал [8] , что связывание readline в CLISP означает что Хейбл должен был повторно лицензировать CLISP по лицензии GPL, если он хотел распространять реализацию CLISP, в которой использовалась readline. [9]

Другой ответ заключался в том, чтобы не использовать это в некоторых проектах, заставляя при вводе текста использовать для редактирования примитивный драйвер терминала Unix.

Альтернативные библиотеки

Альтернативные библиотеки были созданы с другими лицензиями, поэтому их можно использовать в программных проектах, которые хотят реализовать функции редактирования командной строки, но выпускаются с лицензией, отличной от GPL.

Образец кода

Следующий код написан на C и должен быть скомпонован с библиотекой readline, передав компилятору флаг -lreadline :

#include <stdlib.h> #include <stdio.h> #include <readline/readline.h> #include <readline/history.h>    int main () { // Настройте readline для автоматического заполнения путей при нажатии клавиши табуляции. rl_bind_key ( '\t' , rl_complete );     // Включаем историю using_history ();  while ( 1 ) { // Отображение приглашения и чтение входного символа * input = readline ( "prompt> " );        // Проверка EOF. если ( ! вход ) сломать ;    // Добавляем данные в историю чтения. add_history ( вход );  // Делаем что-нибудь... // Свободный буфер, выделенный строкой чтения free ( input ); } вернуть 0 ; }    

Привязки

Языки программирования, отличные от C, которые обеспечивают привязку языка для readline, включают в себя

Поддержка альтернатив readline различается в зависимости от этих привязок.

Примечания

  1. ^ GPL-3.0 или новее, начиная с версии 6.0 (20 февраля 2009 г.).
  2. ^ GPL-2.0 или более поздняя версия от версии 2.1 (05.06.1997) до версии 5.2 (11.10.2006).
  3. ^ GPL-1.0 или новее от? до версии 2.0 (04.08.1994).
  4. ^ Часть псевдотерминалов или PTY (для Linux), что видно из инструментов настройки терминала, таких как stty ; в типичном дистрибутиве Linux главная конечная точка PTY обрабатывает специальные символы как сигналы, которые должны быть отправлены подчиненным устройствам, например SIGINT[2]

Рекомендации

  1. Чет Рэми (26 сентября 2022 г.). «Доступна версия Readline-8.2» . Проверено 26 сентября 2022 г.
  2. ^ «pty(7) — страница руководства Linux» . man7.org . Проверено 30 сентября 2021 г.
  3. ^ "Меньшая стандартная общественная лицензия GNU" . Меньшая стандартная общественная лицензия GNU v3.0 — проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 г.
  4. ^ «Универсальная общественная лицензия GNU». Стандартная общественная лицензия GNU v3.0 — проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 г.
  5. ^ «Часто задаваемые вопросы о лицензиях GNU» . Часто задаваемые вопросы о лицензиях GNU — Проект GNU . Фонд свободного программного обеспечения. 2010 . Проверено 3 сентября 2011 г.
  6. ^ «Почему вам не следует использовать Меньшую GPL для своей следующей библиотеки» . Почему вам не следует использовать Меньшую GPL для вашей следующей библиотеки — Проект GNU — Фонд свободного программного обеспечения . Фонд свободного программного обеспечения. 2016 . Проверено 15 октября 2019 г.
  7. ^ «Уведомление об авторских правах CLISP» . Репозиторий CLISP. 1992 год . Проверено 3 сентября 2011 г.
  8. ^ «Почему CLISP находится под лицензией GPL» . Репозиторий CLISP. 1992 год . Проверено 19 января 2023 г.
  9. ^ «Лицензия - почему GNU GPL?». Часто задаваемые вопросы (с ответами) о CLISP . Команда КЛИСП . Проверено 3 сентября 2011 г.
  10. ^ "editline(3) - Страницы руководства NetBSD" . НетБСД . Проверено 13 сентября 2022 г. Библиотека редактора командной строки (libedit, -ledit)
  11. ^ "MariaDB/server/blob/10.2/BUILD/SETUP.sh". Репозиторий MariaDB . Фонд МарияДБ . Проверено 24 октября 2017 г.
  12. ^ "php/php-src/tree/master/ext/readline". PHP-репозиторий . Группа PHP . Проверено 24 октября 2017 г.
  13. Санфилиппо, Сальваторе (10 мая 2020 г.). «антирез/линейный шум». Гитхаб .
  14. ^ «Приложения и библиотеки». Хаскелл вики . Haskell.org . Проверено 24 октября 2017 г.
  15. ^ Джуда Джейкобсон. «judah/haskeline: библиотека Haskell для строкового ввода в программах командной строки». Репозиторий Haskeline . Проверено 24 октября 2017 г.
  16. ^ «PowerShell/PSReadLine: реализация строки чтения для PowerShell, вдохновленная bash» . Репозиторий PSReadLine . Проверено 20 декабря 2023 г.
  17. ^ «Модуль: Readline (Ruby 3.0.2)» .

Внешние ссылки