GNU Readline - это программная библиотека, которая предоставляет возможности редактирования строк и истории для интерактивных программ с интерфейсом командной строки , таких как Bash . В настоящее время поддерживается Чет Рэми как часть проекта GNU .
Автор (ы) оригинала | Брайан Фокс |
---|---|
Разработчики) | Чет Рэми |
Первый выпуск | 1989 |
Стабильный выпуск | 8.1 / 7 декабря 2020 г . |
Репозиторий | |
Написано в | C |
Тип | Библиотека |
Лицензия | Стандартная общественная лицензия GNU |
Веб-сайт | tiswww |
Он позволяет пользователям перемещать текстовый курсор , выполнять поиск в истории команд , управлять списком уничтожений (более гибкая версия буфера обмена для копирования / вставки) и использовать завершение табуляции в текстовом терминале . Как кроссплатформенная библиотека, readline позволяет приложениям в различных системах демонстрировать идентичное поведение при редактировании строк.
Режимы редактирования
Readline поддерживает режимы редактирования Emacs и vi, которые определяют, как ввод с клавиатуры интерпретируется как команды редактора. Смотрите Editor war # Различия между vi и Emacs .
Сочетания клавиш Emacs
Привязки клавиш режима редактирования Emacs берутся из текстового редактора Emacs .
В некоторых системах Escнеобходимо использовать вместо Alt, потому что Altярлык конфликтует с другим ярлыком. Например, нажатие Alt+ fв окне эмулятора терминала Xfce не перемещает курсор вперед на одно слово, но активирует «Файл» в меню окна терминала, если это не отключено в настройках эмулятора.
- Tab ↹ : Автозаполнение с позиции курсора.
- Ctrl+ a : Перемещает курсор в начало строки (эквивалентно клавише Home).
- Ctrl+ b : Перемещает курсор на один символ назад (эквивалентно клавише ←).
- Ctrl+ c : Посылает сигнал SIGINT текущей задаче, которая прерывает и закрывает ее.
- Ctrl+d
- Ctrl+ e : ( конец ) перемещает курсор в конец строки (эквивалентно клавише End).
- Ctrl+ f : Перемещает курсор на один символ вперед (эквивалентно клавише →).
- Ctrl+ g : Отменить обратный поиск и восстановить исходную строку.
- Ctrl+ h : Удаляет предыдущий символ (аналогично Backspace).
- Ctrl+ i : Эквивалентно клавише табуляции.
- Ctrl+ j : Эквивалентно клавише ввода.
- Ctrl+ k : Очищает содержимое строки после курсора и копирует его в буфер обмена .
- Ctrl+ l : Очищает содержимое экрана (эквивалентно команде
clear
). - Ctrl+ n : ( следующий ) вызывает следующую команду (эквивалентную клавише ↓).
- Ctrl+ o : Выполняет найденную команду из истории и выбирает следующую строку относительно текущей строки из истории для редактирования.
- Ctrl+ p : ( предыдущий ) вызывает предыдущую команду (эквивалентную клавише ↑).
- Ctrl+ r : (обратный поиск) вызывает последнюю команду, включая указанные символы. Второй Ctrl+ rвызывает следующую переднюю команду, соответствующую поиску.
- Ctrl+ s : Вернуться к следующей, более поздней команде обратного поиска (будьте осторожны, чтобы не выполнять ее с терминала, потому что эта команда также запускает свой XOFF). Если вы изменили эту настройку XOFF, используйте Ctrl+ qдля возврата.
- Ctrl+ t : Транспонирование двух предыдущих символов.
- Ctrl+ u : Очищает содержимое строки перед курсором и копирует его в буфер обмена .
- Ctrl+ v : Если следующий ввод также является управляющей последовательностью, введите его буквально (например, * Ctrl+ v Ctrl+ hвводит "^ H", буквальный символ возврата).
- Ctrl+ w : Очищает слово перед курсором и копирует его в буфер обмена .
- Ctrl+ x Ctrl+ e : Редактирует текущую строку в программе $ EDITOR или vi, если не определено.
- Ctrl+ x Ctrl+ r : Прочитать содержимое файла inputrc и включить любые найденные там привязки или назначения переменных.
- Ctrl+ x Ctrl+ u : Пошаговая отмена, запоминается отдельно для каждой строки.
- Ctrl+ x Ctrl+ v : Отображение информации о версии текущего экземпляра Bash.
- Ctrl+ x Ctrl+ x : Меняет курсор на его старую позицию. (Cx, потому что x имеет форму пересечения).
- Ctrl+ y : ( yank ) добавляет содержимое буфера обмена из позиции курсора.
- Ctrl+ z : Посылает сигнал SIGTSTP текущей задаче, которая приостанавливает ее. Чтобы выполнить его в фоновом режиме, можно войти
bg
. Чтобы вернуть его с заднего плана или подвесаfg ['process name or job id']
( переднего плана ) может быть оформлено. - Ctrl+ _ : Пошаговая отмена, запоминающаяся отдельно для каждой строки.
- Alt+ b : ( назад ) перемещает курсор на одно слово назад.
- Alt+ c : Вводит заглавную букву под курсором и перемещается в конец слова.
- Alt+ d : Обрезает слово после курсора.
- Alt+ f : ( вперед ) перемещает курсор на одно слово вперед.
- Alt+ l : Понижает регистр каждого символа от позиции курсора до конца текущего слова.
- Alt+ r : Отменяет изменения и возвращает строку в прежнее состояние.
- Alt+ u : Делает заглавными каждый символ от позиции курсора до конца текущего слова.
- Alt+ . : Вставить последний аргумент предыдущей команды (последнее слово предыдущей записи в истории).
Выбор GPL в качестве лицензии GNU Readline
GNU Readline примечателен тем, что является бесплатной библиотекой программного обеспечения, которая находится под лицензией GNU General Public License (GPL). Гораздо чаще библиотеки бесплатного программного обеспечения предоставляются по лицензии GNU Lesser General Public License (LGPL), например, GNU C Library , GNU gettext и FLTK . Разработчик приложения, который выбирает ссылку на лицензионную библиотеку LGPL, может использовать любую лицензию для приложения. [1] Но связывание с библиотекой под лицензией GPL, такой как Readline, требует, чтобы все объединенное полученное приложение было лицензировано под GPL при распространении, чтобы соответствовать разделу 5 GPL. [2] [3]
Это лицензирование было выбрано FSF в надежде, что это побудит программное обеспечение перейти на GPL. [4] Важным примером приложения, меняющего лицензию для соответствия условиям авторского лева GNU Readline, является CLISP , реализация Common Lisp . Первоначально выпущенный в 1987 году, он был изменен на лицензию GPL в 1992 году [5] после обмена электронной почтой между одним из первых авторов CLISP, Бруно Хейбле, и Ричардом Столлманом , в котором Столлман утверждал [6], что связывание строки чтения в CLISP означает что Хейбл был обязан повторно лицензировать CLISP под GPL, если он хотел распространять реализацию CLISP, в которой использовался readline. [7]
Другой ответ заключался в том, чтобы не использовать это в некоторых проектах, заставляя ввод текста использовать для редактирования примитивный драйвер терминала Unix.
Альтернативные библиотеки
Альтернативные библиотеки были созданы с другими лицензиями, поэтому они могут использоваться проектами программного обеспечения, которые хотят реализовать функциональность редактирования командной строки, но будут выпущены с лицензией без лицензии GPL.
- Многие системы BSD имеют лицензионную библиотеку libedit . MariaDB и PHP позволяют пользователю выбирать во время сборки, связываться ли с GNU Readline или с libedit. [8] [9] libreadline macOS на самом деле является прокладкой над libedit, расположением, известным как editline . [10]
- Linenoise - это крошечная библиотека C, которая предоставляет функции редактирования строк. [11]
- Haskeline - это библиотека для Haskell, похожая на строку чтения . Это в основном написана для Glasgow Haskell Compiler , [12] , но доступен для других проектов Haskell , которые нуждаются в линии редактирования услуг , а также. [13]
Образец кода
Следующий код находится на C и должен быть связан с библиотекой readline, передав компилятору флаг -lreadline :
#include #include #include #include int main () { // Настраиваем строку чтения для автозаполнения путей при нажатии клавиши табуляции. rl_bind_key ( '\ t' , rl_complete ); while ( 1 ) { // Отображение приглашения и чтение input char * input = readline ( "prompt>" ); // Проверяем EOF. если ( ! input ) перерыв ; // Добавляем ввод в историю чтения строки. add_history ( ввод ); // Делаем что-нибудь ... // Свободный буфер, выделенный строкой чтения free ( input ); } return 0 ; }
Привязки
Языки программирования, отличные от C, которые предоставляют языковые привязки для строки чтения, включают:
- Встроенный
readline
модуль Python ; - Встроенный
readline
модуль Node.js ; - Встроенный
readline
модуль Ruby ; [14] - Сторонний
Term::ReadLine
модуль Perl (CPAN) , специальноTerm::ReadLine::Gnu
для GNU ReadLine.
Поддержка альтернатив чтения строк в этих привязках различается.
Примечания и ссылки
- ^ «Стандартная общественная лицензия ограниченного применения GNU» . Стандартная общественная лицензия ограниченного применения GNU v3.0 - проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 .
- ^ «Стандартная общественная лицензия GNU» . Стандартная общественная лицензия GNU v3.0 - проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 .
- ^ «Часто задаваемые вопросы о лицензиях GNU» . Часто задаваемые вопросы о лицензиях GNU - проект GNU . Фонд свободного программного обеспечения. 2010 . Проверено 3 сентября 2011 .
- ^ «Почему вам не следует использовать Lesser GPL для вашей следующей библиотеки» . Почему вам не следует использовать Lesser GPL для вашей следующей библиотеки - проекта GNU - Free Software Foundation . Фонд свободного программного обеспечения. 2016 . Проверено 15 октября 2019 .
- ^ «Уведомление об авторских правах CLISP» . Репозиторий CLISP. 1992 . Проверено 3 сентября 2011 .
- ^ «Почему CLISP под лицензией GPL» . Репозиторий CLISP. 1992 . Проверено 3 сентября 2011 .
- ^ «Лицензия - почему GNU GPL?» . Часто задаваемые вопросы (с ответами) о CLISP . Команда CLISP . Проверено 3 сентября 2011 .
- ^ «MariaDB / server / blob / 10.2 / BUILD / SETUP.sh» . Репозиторий MariaDB . Фонд MariaDB . Проверено 24 октября 2017 .
- ^ "php / php-src / tree / master / ext / readline" . Репозиторий PHP . Группа PHP . Проверено 24 октября 2017 .
- ^ Нильссон, Иоахим (5 мая 2020 г.). "троглобит / строка редактирования" .
- ^ Санфилиппо, Сальваторе (10 мая 2020 г.). «антирез / льняной шум» .
- ^ «Приложения и библиотеки» . Вики-сайт Haskell . haskell.org . Проверено 24 октября 2017 .
- ^ Иуда Якобсон. "Judah / haskeline: библиотека Haskell для строкового ввода в программах командной строки" . Репозиторий Haskeline . Проверено 24 октября 2017 .
- ^ https://ruby-doc.org/stdlib/libdoc/readline/rdoc/Readline.html
Внешние ссылки
- Домашняя страница GNU readline
- Вещи, которые вы не знали о GNU Readline