GNU Readline - Википедия - GNU Readline

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

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

Это позволяет пользователям перемещать текстовый курсор, ищите история команд, управлять убить кольцо (более гибкая версия буфера обмена для копирования и вставки) и используйте завершение табуляции на текстовый терминал. Как кросс-платформенный библиотека readline позволяет приложениям в различных системах демонстрировать идентичное поведение при редактировании строк.

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

Readline поддерживает режимы редактирования Emacs и vi, которые определяют, как ввод с клавиатуры интерпретируется как команды редактора. Видеть Editor war # Различия между vi и Emacs.

Сочетания клавиш Emacs

Режим редактирования Emacs привязки клавиш взяты из Текстовый редактор Emacs.

В некоторых системах Esc должен использоваться вместо Alt, поскольку Alt ярлык конфликтует с другим ярлыком. Например, нажатие Alt+ж в Эмулятор терминала Xfce window не перемещает курсор вперед на одно слово, но активирует «Файл» в меню окна терминала, если это не отключено в настройках эмулятора.

  • Вкладка ↹ : Автозаполнение от позиции курсора.
  • Ctrl+а : Перемещает курсор в начало строки (эквивалентно клавише Дома).
  • Ctrl+б : Перемещает курсор на один символ назад (эквивалентно клавише ).
  • Ctrl+c : Отправляет сигнал SIGINT к текущей задаче, которая прерывает и закрывает ее.
  • Ctrl+d
    • Отправляет маркер EOF, который (если он не отключен параметром) закрывает текущую оболочку (эквивалент команды выход). (Только если в текущей строке нет текста)
    • Если в текущей строке есть текст, удаляет текущий символ (эквивалентный клавише Удалить).
  • Ctrl+е : (конец ) перемещает курсор в конец строки (эквивалентно клавише Конец).
  • Ctrl+ж : Перемещает курсор на один символ вперед (эквивалентно клавише ).
  • Ctrl+грамм : Отменить обратный поиск и восстановить исходную строку.
  • Ctrl+час : Удаляет предыдущий символ (аналогично Backspace).
  • Ctrl+я : Эквивалентно клавише табуляции.
  • Ctrl+j : Эквивалентно клавише ввода.
  • Ctrl+k : Удаляет содержимое строки после курсора и копирует его в буфер обмена.
  • Ctrl+л : Очищает содержимое экрана (эквивалентно команде Чисто).
  • Ctrl+п : (следующий ) вызывает следующую команду (эквивалентную клавише ).
  • Ctrl+о : Выполняет найденную команду из истории и выбирает следующую строку относительно текущей строки из истории для редактирования.
  • Ctrl+п : (предыдущий ) напоминает предыдущую команду (эквивалентную клавише ).
  • Ctrl+р : (обратный поиск) вызывает последнюю команду, содержащую указанные символы. Второй Ctrl+р вызывает следующую переднюю команду, соответствующую поиску
  • Ctrl+s : Вернуться к следующей, более поздней команде обратного поиска (будьте осторожны, чтобы не выполнять ее с терминала, потому что эта команда также запускает свой XOFF). Если вы изменили эту настройку XOFF, используйте Ctrl+q возвращаться.
  • Ctrl+т : Транспонировать два предыдущих символа.
  • Ctrl+ты : Удаляет содержимое строки перед курсором и копирует его в буфер обмена.
  • Ctrl+v : Если следующий ввод также является управляющей последовательностью, введите его буквально (например, * Ctrl+v Ctrl+час набирает "^ H", буквальный символ возврата.)
  • Ctrl+ш : Удаляет слово перед курсором и копирует его в буфер обмена.
  • Ctrl+Икс Ctrl+е : Редактирует текущую строку в программе $ EDITOR, или vi если не определено.
  • Ctrl+Икс Ctrl+р : Прочтите содержимое файла inputrc и включите все найденные там привязки или назначения переменных.
  • Ctrl+Икс Ctrl+ты : Пошаговая отмена, запоминается отдельно для каждой строки.
  • Ctrl+Икс Ctrl+v : Отображение информации о версии текущего экземпляра Bash.
  • Ctrl+Икс Ctrl+Икс : Меняет курсор на его старую позицию. (C-x, потому что x имеет форму пересечения).
  • Ctrl+у : (дергать ) добавляет буфер обмена содержимое от позиции курсора.
  • Ctrl+z : Отправляет сигнал SIGTSTP к текущей задаче, которая приостанавливает ее. Чтобы выполнить его в фоновом режиме, можно ввести bg. Чтобы вернуть его из фона или приостановки fg ['имя процесса или идентификатор задания'] (передний план ) можно оформить.
  • Ctrl+_ : Пошаговая отмена, запоминается отдельно для каждой строки.
  • Alt+б : (назад ) перемещает курсор на одно слово назад.
  • Alt+c : Вводит заглавную букву под курсором и перемещается в конец слова.
  • Alt+d : Обрезает слово после курсора.
  • Alt+ж : (вперед ) перемещает курсор на одно слово вперед.
  • Alt+л : Понижает регистр каждого символа от позиции курсора до конца текущего слова.
  • Alt+р : Отменяет изменения и возвращает строку в прежнее состояние.
  • Alt+ты : Вводит заглавные буквы в каждый символ от позиции курсора до конца текущего слова.
  • Alt+. : Вставить последний аргумент предыдущей команды (последнее слово предыдущей записи в истории).

Выбор GPL в качестве лицензии GNU Readline

GNU Readline отличается тем, что бесплатно программное обеспечение библиотека, которая находится под лицензией Стандартная общественная лицензия GNU (GPL). Бесплатные библиотеки программного обеспечения гораздо чаще лицензируются под Стандартная общественная лицензия ограниченного применения GNU (LGPL), например, Библиотека GNU C, GNU gettext и ФЛТК. Разработчик приложения, который выбирает ссылку на лицензионную библиотеку LGPL, может использовать любую лицензию для приложения.[1] Но ссылка на GPL лицензированной библиотеке, такой как Readline, требуется весь объединенное полученное приложение будет лицензироваться по GPL при распространении, чтобы соответствовать разделу 5 GPL.[2][3]

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

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

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

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

  • Многие системы BSD имеют Под лицензией BSD libedit. MariaDB и PHP позволяют пользователю выбирать во время сборки, связываться ли с GNU Readline или с libedit.[8][9] macOS с libreadline на самом деле прокладка над libedit, расположение, известное как строка редактирования.[10]
  • льняной шум это крошечная библиотека C, которая предоставляет функции редактирования строк.[11]
  • Хаскелин - это библиотека для Haskell, подобная readline. Он в основном написан для Компилятор Glasgow Haskell,[12] но доступен и для других проектов Haskell, которым также требуются услуги редактирования строк.[13]

Образец кода

Следующий код находится в C и должен быть связан с библиотекой readline, передавая -lreadline флаг компилятору:

#включают <stdlib.h>#включают <stdio.h>#включают <readline/readline.h>#включают <readline/history.h>int главный(){    // Настроить строку чтения для автозаполнения путей при нажатии клавиши табуляции.    rl_bind_key(' t', rl_complete);    пока (1) {        // Отображение подсказки и чтение ввода        char* Вход = строка чтения("подсказка>");        // Проверяем EOF.        если (!Вход)            перемена;        // Добавляем ввод в историю чтения строки.        add_history(Вход);        // Делаем что-нибудь ...        // Свободный буфер, выделенный строкой чтения        свободный(Вход);    }    возвращаться 0;}

Примечания и ссылки

  1. ^ «Стандартная общественная лицензия ограниченного применения GNU». Стандартная общественная лицензия ограниченного применения GNU версии 3.0 - проект GNU. Фонд свободного программного обеспечения. 2007 г.. Получено 2011-09-03.
  2. ^ «Стандартная общественная лицензия GNU». Стандартная общественная лицензия GNU v3.0 - проект GNU. Фонд свободного программного обеспечения. 2007 г.. Получено 2011-09-03.
  3. ^ «Часто задаваемые вопросы о лицензиях GNU». Часто задаваемые вопросы о лицензиях GNU - проект GNU. Фонд свободного программного обеспечения. 2010 г.. Получено 2011-09-03.
  4. ^ «Почему вам не следует использовать Lesser GPL для вашей следующей библиотеки». Почему вам не следует использовать Lesser GPL для вашей следующей библиотеки - проект GNU - фонд свободного программного обеспечения. Фонд свободного программного обеспечения. 2016 г.. Получено 2019-10-15.
  5. ^ «Уведомление об авторских правах CLISP». Репозиторий CLISP. 1992 г.. Получено 2011-09-03.
  6. ^ «Почему CLISP под лицензией GPL». Репозиторий CLISP. 1992 г.. Получено 2011-09-03.
  7. ^ «Лицензия - почему GNU GPL?». Часто задаваемые вопросы (с ответами) о CLISP. Команда CLISP. Получено 2011-09-03.
  8. ^ "MariaDB / server / blob / 10.2 / BUILD / SETUP.sh". Репозиторий MariaDB. Фонд MariaDB. Получено 2017-10-24.
  9. ^ "php / php-src / tree / master / ext / readline". Репозиторий PHP. Группа PHP. Получено 2017-10-24.
  10. ^ Нильссон, Иоахим (5 мая 2020 г.). "троглобит / строка редактирования".
  11. ^ Санфилиппо, Сальваторе (10 мая 2020 г.). "антирез / льняной".
  12. ^ «Приложения и библиотеки». Haskell вики. haskell.org. Получено 2017-10-24.
  13. ^ Иуда Якобсон. "Judah / haskeline: библиотека Haskell для строкового ввода в программах командной строки". Репозиторий Haskeline. Получено 2017-10-24.

внешняя ссылка