Jump to content

Линия чтения GNU

Линия чтения GNU
Оригинальный автор(ы) Брайан Фокс
Разработчик(и) Chet Ramey
Первоначальный выпуск 1989 год ; 35 лет назад ( 1989 )
Стабильная версия
8.2 [1]  Отредактируйте это в Викиданных / 26 сентября 2022 г.
Репозиторий
Написано в С
Тип Библиотека
Лицензия 2009: GPL-3.0 или новее [а]
1997: GPL-2.0 или более поздняя версия [б]
1994: GPL-1.0 или более поздняя версия [с]
Веб-сайт www .gnu .org /программное обеспечение /readline /  Edit this on Wikidata

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

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

Режимы редактирования [ править ]

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

Сочетания клавиш 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 ) перемещает курсор в конец строки (эквивалентно клавише End).
  • Ctrl+ f : перемещает курсор на один символ вперед (эквивалентно клавише ).
  • Ctrl+ g : Прервать обратный поиск и восстановить исходную строку.
  • Ctrl+ h : удаляет предыдущий символ (аналогично Backspace).
  • Ctrl+ i : эквивалент клавиши табуляции.
  • Ctrl+ j : Эквивалент клавиши ввода.
  • Ctrl+ k : Очищает содержимое строки после курсора и копирует его в буфер обмена .
  • Ctrl+ l : Очищает содержимое экрана (эквивалентно команде clear).
  • Ctrl+ n : ( next ) вызывает следующую команду (эквивалент клавиши ).
  • 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 , GNU gettext и FLTK . Разработчик приложения, выбравший ссылку на библиотеку с лицензией LGPL, может использовать для приложения любую лицензию. [3] Но для подключения к библиотеке, лицензируемой GPL, такой как Readline, требуется, чтобы все объединенное полученное приложение при распространении было лицензировано по GPL, чтобы соответствовать разделу 5 GPL. [4] [5]

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

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

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

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

  • Многие системы BSD имеют лицензию libedit . [10] [11] MariaDB и PHP позволяют пользователю выбирать во время сборки, связываться ли с GNU Readline или с libedit. [12] [13]
  • linenoise — это крошечная библиотека C, предоставляющая функции редактирования строк. [14]
  • Haskeline — это лицензированная BSD-3-Clause библиотека, подобная readline, для Haskell. В основном он написан для компилятора Glasgow Haskell , [15] но доступен для других проектов Haskell, которым также необходимы услуги по редактированию строк. [16]
  • PSReadLine — это реализация строки чтения под лицензией BSD-2-Clause, написанная на C# для PowerShell, вдохновленная bash и GNU Readline. [17]

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

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

    // Enable history
    using_history();

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

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

Примечания [ править ]

  1. ^ GPL-3.0 или новее, начиная с версии 6.0 (20 февраля 2009 г.).
  2. ^ GPL-2.0 или более поздняя версия от версии 2.1 (05.06.1997) до версии 5.2 (11.10.2006).
  3. ^ GPL-1.0 или новее от? до версии 2.0 (04.08.1994).
  4. ^ Часть псевдотерминалов или PTY (для Linux), что видно из инструментов настройки терминала, таких как stty ; в типичном дистрибутиве Linux главная конечная точка PTY обрабатывает специальные символы как сигналы, которые должны быть отправлены подчиненным устройствам, например SIGINT[2]

Ссылки [ править ]

  1. ^ Чет Рэми (26 сентября 2022 г.). «Доступна версия Readline-8.2» . Проверено 26 сентября 2022 г.
  2. ^ «pty(7) — страница руководства Linux» . man7.org . Проверено 30 сентября 2021 г.
  3. ^ «Меньшая стандартная общественная лицензия GNU» . Меньшая стандартная общественная лицензия GNU v3.0 — проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 г.
  4. ^ «Универсальная общественная лицензия GNU» . Стандартная общественная лицензия GNU v3.0 — проект GNU . Фонд свободного программного обеспечения. 2007 . Проверено 3 сентября 2011 г.
  5. ^ «Часто задаваемые вопросы о лицензиях GNU» . Часто задаваемые вопросы о лицензиях GNU — Проект GNU . Фонд свободного программного обеспечения. 2010 . Проверено 3 сентября 2011 г.
  6. ^ «Почему вам не следует использовать Меньшую GPL для своей следующей библиотеки» . Почему вам не следует использовать Меньшую GPL для вашей следующей библиотеки — Проект GNU — Фонд свободного программного обеспечения . Фонд свободного программного обеспечения. 2016 . Проверено 15 октября 2019 г.
  7. ^ «Уведомление об авторских правах CLISP» . Репозиторий CLISP. 1992 год . Проверено 3 сентября 2011 г.
  8. ^ «Почему CLISP находится под лицензией GPL» . Репозиторий CLISP. 1992 год . Проверено 19 января 2023 г.
  9. ^ «Лицензия – почему GNU GPL?» . Часто задаваемые вопросы (с ответами) о CLISP . Команда КЛИСП . Проверено 3 сентября 2011 г.
  10. ^ «editline(3) — Страницы руководства NetBSD» . НетБСД . Проверено 13 сентября 2022 г. Библиотека редактора командной строки (libedit, -ledit)
  11. ^ Библиотека Editline (libedit)
  12. ^ "MariaDB/server/blob/10.2/BUILD/SETUP.sh" . Репозиторий MariaDB . Фонд МарияДБ . Проверено 24 октября 2017 г.
  13. ^ «php/php-src/tree/master/ext/readline» . PHP-репозиторий . Группа PHP . Проверено 24 октября 2017 г.
  14. ^ Санфилиппо, Сальваторе (10 мая 2020 г.). «антирез/линейный шум» . GitHub
  15. ^ «Приложения и библиотеки» . Хаскелл вики . Haskell.org . Проверено 24 октября 2017 г.
  16. ^ Джуда Джейкобсон. «judah/haskeline: библиотека Haskell для строкового ввода в программах командной строки» . Репозиторий Haskeline . Проверено 24 октября 2017 г.
  17. ^ «PowerShell/PSReadLine: реализация строки чтения для PowerShell, вдохновленная bash» . Репозиторий PSReadLine . Проверено 20 декабря 2023 г.
  18. ^ «Модуль: Readline (Ruby 3.0.2)» .

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 61cb5dae5679d19c89b79055f23d8e92__1716629160
URL1:https://arc.ask3.ru/arc/aa/61/92/61cb5dae5679d19c89b79055f23d8e92.html
Заголовок, (Title) документа по адресу, URL1:
GNU Readline - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)