Введение
Библиотека программного обеспечения GNU Readline — это программная библиотека, предоставляющая возможности редактирования в процессе ввода и сохранения истории команд для интерактивных программ с интерфейсом командной строки, таких как Bash. В настоящее время её сопровождает Chet Ramey в рамках проекта GNU. Она позволяет пользователям перемещать курсор, искать в истории команд, использовать кольцевой буфер (более гибкую версию буфера обмена для копирования и вставки) и автодополнение с помощью клавиши Tab в текстовом терминале. Как кроссплатформенная библиотека, Readline обеспечивает одинаковое поведение при редактировании строк в приложениях, работающих на различных операционных системах.
GNU Readline is a software library that provides in line editing and history capabilities for interactive programs with a command line interface, such as Bash. It is currently maintained by Chet Ramey as part of the GNU Project. It allows users to move the text cursor, search the command history, control a kill ring (a more flexible version of a copy/paste clipboard) and use tab completion on a text terminal. As a cross platform library, readline allows applications on various systems to exhibit identical line editing behavior.
Режимы редактирования
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-.`: Вставляет последний аргумент предыдущей команды (последнее слово предыдущей записи истории).
If there is text on the current line, deletes the current character (then equivalent to the key ). : (end) moves the cursor to the line end (equivalent to the key ). : Moves the cursor forward one character (equivalent to the key ). : Abort the reverse search and restore the original line. : Deletes the previous character (same as backspace). : Equivalent to the tab key. : Equivalent to the enter key. : Clears the line content after the cursor and copies it into the clipboard. : Clears the screen content (equivalent to the command clear). : (next) recalls the next command (equivalent to the key ). : Executes the found command from history, and fetch the next line relative to the current line from the history for editing. : (previous) recalls the prior command (equivalent to the key ). : (reverse search) recalls the last command including the specified characters. A second recalls the next anterior command that corresponds to the search
: Go back to the next more recent command of the reverse search (beware to not execute it from a terminal because this command also launches its XOFF). If you changed that XOFF setting, use to return. : Transpose the previous two characters. : Clears the line content before the cursor and copies it into the clipboard. : If the next input is also a control sequence, type it literally (e. g. * types "^H", a literal backspace.) : Clears the word before the cursor and copies it into the clipboard. : Edits the current line in the $EDITOR program, or vi if undefined. : Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there. : Incremental undo, separately remembered for each line. : Display version information about the current instance of Bash. : Alternates the cursor with its old position. (C x, because x has a crossing shape). : (yank) adds the clipboard content from the cursor position. : Sends the signal SIGTSTP to the current task, which suspends it. To execute it in background one can enter bg. To bring it back from background or suspension fg ['process name or job id'] (foreground) can be issued. : Incremental undo, separately remembered for each line. : (backward) moves the cursor backward one word. : Capitalizes the character under the cursor and moves to the end of the word. : Cuts the word after the cursor. : (forward) moves the cursor forward one word. : Lowers the case of every character from the cursor's position to the end of the current word. : Cancels the changes and puts back the line as it was in the history. : Capitalizes every character from the cursor's position to the end of the current word. : Insert the last argument to the previous command (the last word of the previous history entry).
Выбор 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 для редактирования текста.