Введение

Библиотека программного обеспечения GNU Readline — это программная библиотека, предоставляющая возможности редактирования в процессе ввода и сохранения истории команд для интерактивных программ с интерфейсом командной строки, таких как Bash. В настоящее время её сопровождает Chet Ramey в рамках проекта GNU. Она позволяет пользователям перемещать курсор, искать в истории команд, использовать кольцевой буфер (более гибкую версию буфера обмена для копирования и вставки) и автодополнение с помощью клавиши Tab в текстовом терминале. Как кроссплатформенная библиотека, Readline обеспечивает одинаковое поведение при редактировании строк в приложениях, работающих на различных операционных системах.

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

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

Краткие клавиатуры Emacs

Ключи редактирования Emacs взяты из текстового редактора Emacs. В некоторых системах вместо `<Ctrl-v>` следует использовать `<Ctrl-Shift-v>`, потому что сочетание `<Ctrl-v>` конфликтует с другим сочетанием. Например, нажатие `<Ctrl-v>` в окне эмулятора терминала Xfce не перемещает курсор вперед на одно слово, а активирует "Файл" в меню окна терминала, если это не отключено в настройках эмулятора. `<Alt-.>`: Автозаполнение из позиции курсора. `<Ctrl-a>`: Перемещает курсор к началу строки (эквивалентно клавише `<Home>`). `<Ctrl-b>`: Перемещает курсор на один символ назад (эквивалентно клавише `<Left>`). `<Ctrl-c>`: Посылает сигнал SIGINT через псевдотерминал к текущей задаче, которая прерывает и закрывает ее. Отправляет маркер EOF, который (если не отключен опцией) закрывает текущую оболочку (эквивалент команды `exit`). (Только если нет текста на текущей строке). Если есть текст на текущей строке, удаляет текущий символ (тогда эквивалент клавише `<Backspace>`). `<Ctrl-e>`: (end) перемещает курсор к концу строки (эквивалентно клавише `<End>`). `<Ctrl-f>`: Перемещает курсор на один символ вперед (эквивалентно клавише `<Right>`). `<Ctrl-r>`: Отменяет обратный поиск и восстанавливает исходную строку. `<Ctrl-h>`: Удаляет предыдущий символ (то же, что и `<Backspace>`). `<Tab>`: эквивалент клавиши `<Tab>`. `<Enter>`: эквивалент клавиши `<Enter>`. `<Ctrl-k>`: Очищает содержимое строки после курсора и копирует его в буфер обмена. `<Ctrl-l>`: Очищает содержимое экрана (эквивалентно команде `clear`). `<Ctrl-n>`: (next) вспоминает следующую команду (эквивалент клавише `<Down>`). `<Ctrl-y>`: Выполняет найденную команду из истории и извлекает следующую строку относительно текущей строки из истории для редактирования. `<Ctrl-p>`: (previous) возвращает предыдущую команду (эквивалент клавише `<Up>`). `<Ctrl-s>`: (reverse search) вспоминает последнюю команду, включая указанные символы. Второе нажатие `<Ctrl-s>` вспоминает следующую предыдущую команду, соответствующую поиску. `<Ctrl-g>`: Возвращается к следующей более поздней команде обратного поиска (осторожно, не выполняйте ее из терминала, так как эта команда также запускает XOFF). Если вы изменили настройку XOFF, используйте `<Ctrl-r>` для возврата. `<Ctrl-t>`: Переставляет два предыдущих символа. `<Ctrl-u>`: Очищает содержимое строки перед курсором и копирует его в буфер обмена. `<Ctrl-q>`: Если следующий ввод также является управляющей последовательностью, введите его буквально (например, `<Ctrl-v>` вводит "^H", буквальное удаление символа). `<Alt-d>`: Удаляет слово перед курсором и копирует его в буфер обмена. `<Alt-x>`: Редактирует текущую строку в программе `$EDITOR` или `vi`, если не определена. `<Ctrl-r>`: Прочитывает содержимое файла `inputrc` и включает любые привязки или присваивания переменных, найденные там. `<Ctrl-_>` или `<Ctrl-x><Ctrl-u>`: Постепенное отмена, запоминается отдельно для каждой строки. `bind -p`: Отображает информацию о версии текущего экземпляра Bash. `<Ctrl-x><Ctrl-c>`: Перемещает курсор в прежнее положение. (C x, потому что x имеет форму пересечения). `<Ctrl-y>`: (yank) добавляет содержимое буфера обмена с позиции курсора. `<Ctrl-z>`: Посылает сигнал SIGTSTP текущей задаче, которая приостанавливает ее. Чтобы запустить ее в фоновом режиме, можно ввести `bg`. Для возвращения из фонового режима или приостановки можно выполнить `fg ['название процесса или идентификатор задания']` (foreground). `<Ctrl-_>` или `<Ctrl-x><Ctrl-u>`: Постепенное отмена, запоминается отдельно для каждой строки. `<Alt-b>`: (backward) перемещает курсор назад на одно слово. `<Alt-c>`: Делает символ под курсором заглавным и перемещается к концу слова. `<Alt-d>`: Вырезает слово после курсора. `<Alt-f>`: (forward) перемещает курсор вперед на одно слово. `<Alt-l>`: Преобразует все символы от позиции курсора до конца текущего слова в нижний регистр. `<Ctrl-x><Ctrl-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, может использовать любую лицензию для своего приложения. Однако, подключение к библиотеке, лицензированной по GPL, такой как Readline, требует, чтобы всё объединённое приложение также лицензировалось по GPL при распространении, в соответствии с пунктом 5 GPL. ФСФ выбрала такую лицензию в надежде, что это побудит программное обеспечение переходить на GPL. Важным примером приложения, изменившего свою лицензию для соответствия условиям copyleft GNU Readline, является CLISP – реализация Common Lisp. Изначально выпущенная в 1987 году, она перешла на лицензию GPL в 1992 году после переписки по электронной почте между одним из первоначальных авторов CLISP, Бруно Хайбле, и Ричардом Столлманом, в которой Столлман утверждал, что использование Readline в CLISP обязывает Хайбле перелицензировать CLISP под GPL, если он желает распространять реализацию CLISP, использующую Readline. Другой реакцией стало исключение Readline из некоторых проектов, что привело к использованию примитивного драйвера терминала Unix для редактирования текста.