Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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, может использовать любую лицензию для приложения. [1] Но связывание с библиотекой под лицензией GPL, такой как Readline, требует, чтобы все объединенное полученное приложение было лицензировано под GPL при распространении, чтобы соответствовать разделу 5 GPL. [2][3]

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

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

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

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

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

Пример кода [ править ]

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

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

Привязки [ править ]

Языки программирования, отличные от C, которые предоставляют языковые привязки для строки чтения, включают:

  • Встроенный readlineмодуль Python ;
  • Встроенный readlineмодуль Node.js ;
  • Встроенный readlineмодуль Ruby ; [14]
  • Сторонний Term::ReadLineмодуль Perl (CPAN) , специально Term::ReadLine::Gnuдля GNU ReadLine.

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

Примечания и ссылки [ править ]

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

Внешние ссылки [ править ]

  • Домашняя страница GNU readline
  • Вещи, которые вы не знали о GNU Readline