GNU Readline - GNU Readline

GNU Readline
Heckert GNU white.svg
Автор (ы) оригинала Брайан Фокс
Разработчики) Чет Рэми
Первый выпуск 1989 ; 32 года назад ( 1989 )
Стабильный выпуск
8.1 / 7 декабря 2020 г . ; 10 месяцев назад ( 07.12.2020 )
Репозиторий
Написано в C
Тип Библиотека
Лицензия Стандартная общественная лицензия GNU
Веб-сайт tiswww .case .edu / php / chet / readline / rltop .html

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

Он позволяет пользователям перемещать текстовый курсор , выполнять поиск в истории команд , управлять списком уничтожений (более гибкая версия буфера обмена для копирования / вставки) и использовать завершение табуляции в текстовом терминале . Как кроссплатформенная библиотека, 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
    • Отправляет маркер EOF, который (если он не отключен опцией) закрывает текущую оболочку (эквивалентно команде exit). (Только если в текущей строке нет текста)
    • Если в текущей строке есть текст, удаляет текущий символ (эквивалентный клавише Delete).
  • 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, может использовать любую лицензию для приложения. Но связывание с библиотекой под лицензией GPL, такой как Readline, требует, чтобы все объединенное полученное приложение было лицензировано под GPL при распространении, чтобы соответствовать разделу 5 GPL.

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

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

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

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

  • Многие системы BSD имеют лицензионную версию библиотеки libedit . MariaDB и PHP позволяют пользователю выбирать во время сборки, связываться ли с GNU Readline или с libedit. libreadline macOS на самом деле является прокладкой над libedit, расположением, известным как editline .
  • Linenoise - это крошечная библиотека C, которая предоставляет функции редактирования строк.
  • Haskeline - это библиотека для Haskell, похожая на строку чтения . Он в основном написан для компилятора Glasgow Haskell , но доступен и для других проектов Haskell, которым также нужны услуги редактирования строк.

Образец кода

Следующий код находится на 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);

    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модуль Node.js ;
  • Встроенный readlineмодуль Ruby ;
  • Сторонний Term::ReadLineмодуль Perl (CPAN) , специально Term::ReadLine::Gnuдля GNU ReadLine.

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

Примечания

использованная литература

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