Линия чтения GNU
![]() | |
Оригинальный автор(ы) | Брайан Фокс |
---|---|
Разработчик(и) | Chet Ramey |
Первоначальный выпуск | 1989 год |
Стабильная версия | 8.2 [1] ![]() |
Репозиторий | |
Написано в | С |
Тип | Библиотека |
Лицензия | 2009: GPL-3.0 или новее [а] 1997: GPL-2.0 или более поздняя версия [б] 1994: GPL-1.0 или более поздняя версия [с] |
Веб-сайт | www ![]() |
GNU Readline — это программная библиотека , которая обеспечивает возможности оперативного редактирования и истории для интерактивных программ с интерфейсом командной строки , таких как Bash . В настоящее время его поддерживает Чет Рэми как часть проекта GNU .
Он позволяет пользователям перемещать текстовый курсор , выполнять поиск в истории команд , управлять кольцом уничтожения (более гибкая версия буфера обмена копирования/вставки) и использовать завершение табуляции на текстовом терминале . Будучи кросс-платформенной библиотекой, readline позволяет приложениям в различных системах демонстрировать одинаковое поведение при редактировании строк.
Режимы редактирования [ править ]
Readline поддерживает режимы редактирования Emacs и vi, которые определяют, как ввод с клавиатуры интерпретируется как команды редактора. См. Editor war § Сравнение .
Сочетания клавиш Emacs [ править ]
режима редактирования Emacs Привязки клавиш взяты из текстового редактора Emacs .
В некоторых системах Esc необходимо использовать вместо Alt, потому что Alt ярлык конфликтует с другим ярлыком. Например, нажав Alt+ f в окне эмулятора терминала Xfce не перемещает курсор вперед на одно слово, а активирует «Файл» в меню окна терминала, если это не отключено в настройках эмулятора.
- Tab ↹ : автозаполнение с позиции курсора.
- Ctrl+ a : перемещает курсор в начало строки (эквивалентно клавише Home).
- Ctrl+ b : перемещает курсор на один символ назад (эквивалентно клавише ←).
- Ctrl+ c : отправляет сигнал SIGINT через псевдотерминал текущей задаче, которая прерывает и закрывает ее. [д]
- Ctrl+ d
- Ctrl+ e : ( end ) перемещает курсор в конец строки (эквивалентно клавише End).
- Ctrl+ f : перемещает курсор на один символ вперед (эквивалентно клавише →).
- Ctrl+ g : Прервать обратный поиск и восстановить исходную строку.
- Ctrl+ h : удаляет предыдущий символ (аналогично Backspace).
- Ctrl+ i : эквивалент клавиши табуляции.
- Ctrl+ j : Эквивалент клавиши ввода.
- Ctrl+ k : Очищает содержимое строки после курсора и копирует его в буфер обмена .
- Ctrl+ l : Очищает содержимое экрана (эквивалентно команде
clear
). - Ctrl+ n : ( next ) вызывает следующую команду (эквивалент клавиши ↓).
- 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 , 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 означало, что Haible должен был повторно лицензировать CLISP под лицензией GPL, если он хотел распространять реализацию CLISP, в которой использовалась readline. [9]
Другой ответ заключался в том, чтобы не использовать это в некоторых проектах, заставляя при вводе текста использовать для редактирования примитивный драйвер терминала Unix.
Альтернативные библиотеки [ править ]
Альтернативные библиотеки были созданы с другими лицензиями, поэтому их можно использовать в программных проектах, которые хотят реализовать функции редактирования командной строки, но выпускаются с лицензией, отличной от GPL.
- Многие системы BSD имеют лицензию libedit . [10] [11] MariaDB и PHP позволяют пользователю выбирать во время сборки, связываться ли с GNU Readline или с libedit. [12] [13]
- linenoise — это крошечная библиотека C, предоставляющая функции редактирования строк. [14]
- Haskeline — это лицензированная BSD-3-Clause библиотека, подобная readline, для Haskell. В основном он написан для компилятора Glasgow Haskell , [15] но доступен для других проектов Haskell, которым также необходимы услуги по редактированию строк. [16]
- PSReadLine — это реализация строки чтения под лицензией BSD-2-Clause, написанная на C# для PowerShell, вдохновленная bash и GNU Readline. [17]
Пример кода [ править ]
Следующий код написан на языке C и должен быть связан с библиотекой readline путем передачи -lreadline флаг компилятору:
#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
int main()
{
// Configure readline to auto-complete paths when the tab key is hit.
rl_bind_key('\t', rl_complete);
// Enable history
using_history();
while (1) {
// Display prompt and read input
char* input = readline("prompt> ");
// Check for EOF.
if (!input)
break;
// Add input to readline history.
add_history(input);
// Do stuff...
// Free buffer that was allocated by readline
free(input);
}
return 0;
}
Привязки [ править ]
Языки программирования, отличные от C, которые обеспечивают привязку языка для readline, включают в себя
- встроенный в Python
readline
модуль; - встроенный в Ruby
readline
модуль; [18] - Сторонняя программа Perl (CPAN)
Term::ReadLine
модуль, в частностиTerm::ReadLine::Gnu
для GNU ReadLine.
Поддержка альтернатив readline различается в зависимости от этих привязок.
Примечания [ править ]
- ^ GPL-3.0 или новее, начиная с версии 6.0 (20 февраля 2009 г.).
- ^ GPL-2.0 или более поздняя версия от версии 2.1 (05.06.1997) до версии 5.2 (11.10.2006).
- ^ GPL-1.0 или новее от? до версии 2.0 (04.08.1994).
- ^ Часть псевдотерминалов или PTY (для Linux), что видно из инструментов настройки терминала, таких как stty ; в типичном дистрибутиве Linux главная конечная точка PTY обрабатывает специальные символы как сигналы, которые должны быть отправлены подчиненным устройствам, например
SIGINT
[2]
Ссылки [ править ]
- ^ Чет Рэми (26 сентября 2022 г.). «Доступна версия Readline-8.2» . Проверено 26 сентября 2022 г.
- ^ «pty(7) — страница руководства Linux» . man7.org . Проверено 30 сентября 2021 г.
- ^ «Меньшая стандартная общественная лицензия GNU» . Меньшая стандартная общественная лицензия GNU v3.0 — проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 г.
- ^ «Универсальная общественная лицензия GNU» . Стандартная общественная лицензия GNU v3.0 — проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 г.
- ^ «Часто задаваемые вопросы о лицензиях GNU» . Часто задаваемые вопросы о лицензиях GNU — Проект GNU . Фонд свободного программного обеспечения. 2010 . Проверено 3 сентября 2011 г.
- ^ «Почему вам не следует использовать Меньшую GPL для своей следующей библиотеки» . Почему вам не следует использовать Меньшую GPL для вашей следующей библиотеки — Проект GNU — Фонд свободного программного обеспечения . Фонд свободного программного обеспечения. 2016 . Проверено 15 октября 2019 г.
- ^ «Уведомление об авторских правах CLISP» . Репозиторий CLISP. 1992 год . Проверено 3 сентября 2011 г.
- ^ «Почему CLISP находится под лицензией GPL» . Репозиторий CLISP. 1992 год . Проверено 19 января 2023 г.
- ^ «Лицензия – почему GNU GPL?» . Часто задаваемые вопросы (с ответами) о CLISP . Команда КЛИСП . Проверено 3 сентября 2011 г.
- ^ «editline(3) — Страницы руководства NetBSD» . НетБСД . Проверено 13 сентября 2022 г.
Библиотека редактора командной строки (libedit, -ledit)
- ^ Библиотека Editline (libedit)
- ^ "MariaDB/server/blob/10.2/BUILD/SETUP.sh" . Репозиторий MariaDB . Фонд МарияДБ . Проверено 24 октября 2017 г.
- ^ «php/php-src/tree/master/ext/readline» . PHP-репозиторий . Группа PHP . Проверено 24 октября 2017 г.
- ^ Санфилиппо, Сальваторе (10 мая 2020 г.). «антирез/линейный шум» . GitHub
- ^ «Приложения и библиотеки» . Хаскелл вики . Haskell.org . Проверено 24 октября 2017 г.
- ^ Джуда Джейкобсон. «judah/haskeline: библиотека Haskell для строкового ввода в программах командной строки» . Репозиторий Haskeline . Проверено 24 октября 2017 г.
- ^ «PowerShell/PSReadLine: реализация строки чтения для PowerShell, вдохновленная bash» . Репозиторий PSReadLine . Проверено 20 декабря 2023 г.
- ^ «Модуль: Readline (Ruby 3.0.2)» .