| GNU readline | |
|---|---|
| 👁 Логотип программы GNU readline | |
| Тип | Библиотека |
| Автор | Брайан Фокс |
| Разработчик | Чет Рамэй |
| Написана на | C |
| Операционная система | Различные |
| Дата выпуска | 1989 |
| Последняя версия | |
| Альфа-версия | |
| Репозиторий | git.savannah.gnu.org/cgi… |
| Лицензия | GNU General Public License |
| Сайт | tiswww.case.edu/php/chet… |
GNU readline — свободная библиотека для интерфейса командной строки и обработки строк. Создана и поддерживается в рамках проекта GNU. Библиотека распространяется на условиях GNU General Public License. Последние версии библиотеки позволяют работать с многобайтовыми кодировками (Unicode).
Например, при вводе строки с использованием readline нажатие C-b (+) передвигает курсор на одну позицию назад, тогда как + передвигает курсор на одну позицию вперёд; нажатие + позволяет произвести поиск команд среди ранее введённых; использование этих клавиш пришло из одной из старейших и популярнейших программ проекта GNU — текстового редактора Emacs (описаны назначенные по умолчанию клавиши, но это назначение можно изменить, сделав его подобным применяемому в редакторе vi). Кроме того, readline поддерживает буфер обмена и дополнение имени команды по первым символам при нажатии клавиши . Readline является кросс-платформеной библиотекой, а значит, позволяет многим программам сохранить одинаковое поведение при вводе строки пользователем даже при переходе на другую платформу.
Конфигурация и примеры
[править | править код]После установки readline полезно будет настроить под себя возможности редактирования в командной строке. Для этого нужно отредактировать один из конфигурационных файлов:
- — глобальный файл конфигурации для всех пользователей;
- — файл конфигурации для отдельных пользователей, хранимый в их домашнем каталоге;
Не следует забывать — readline является библиотекой, а не самостоятельной утилитой, и поэтому те программы, которые используют readline могут иметь собственные файлы конфигурации, в которых определяется поведение библиотеки для решения специальных задач.
Формат файла конфигурации
[править | править код]- Комментарии — начинаются с символа #
- Назначения значений переменным конфигурации — пример:
- Управляющие директивы — примеры:
- Назначения функций или макросов клавиатурным сочетаниям (англ. keyseq) —
Клавиатурные сочетания
[править | править код]Команда bind.
Интересные примеры макросов
[править | править код]В файлах конфигурации помимо простого переназначения функций редактирования новым «клавиатурным сочетаниям» можно создать достаточно нетривиальные макросы для выполнения специальных задач. Вот несколько примеров:
"\e[A~":"\C-aman "— При нажатии в начало строки добавляется "man ""\ee":"\C-a/etc/init.d/ restart\e[5D\C-b"— При нажатии + (или последовательном ) в начало командной строки вводится текст , после чего курсор сдвигается на одно слово и символ назад."\ew":"ping -c 3 -w 5 -R rbc.ru\e[5D\e[5D"— При нажатии +, выводит ping -c 3 -w 5 -R rbc.ru и переводит курсор к rbc.ru.
Нетривиальные примеры
[править | править код]Помимо ввода текста и выполнения функций редактирования, клавишам можно назначить немедленное выполнение программ или сценариев. Причём можно использовать возвращаемый в ходе выполнения программ текст для вставки его в редактируемую строку. Например, можно запрограммировать readline, чтобы при вводе определённой команды в качестве её аргументов можно было интерактивно подставлять с помощью функции не только имена файлов/каталогов, но и определённые параметры, специфичные именно для этой команды. Для настройки автодополнения используют команду .
Пример кода
[править | править код]Следующий код написан на C :
#include<stdlib.h> #include<stdio.h> #include<unistd.h> #include<readline/readline.h> #include<readline/history.h> intmain() { char*input,shell_prompt[100]; for(;;) { // getting the current user's path snprintf(shell_prompt,sizeof(shell_prompt),"%s:%s $ ",getenv("USER"),getcwd(NULL,1024)); // inputing... input=readline(shell_prompt); // eof if(!input) break; // path autocompletion when tabulation hit rl_bind_key('\t',rl_complete); // adding the previous input into history add_history(input); /* do stuff */ // Т. к. вызов readline() выделяет память, но не освобождает (а возвращает), то эту память нужно вернуть (освободить). free(input); } }
Примечания
[править | править код]- ↑ Ramey C. Readline-8.3-release available (англ.) — 2025.
- ↑ readline.git - The GNU Readline library
Ссылки
[править | править код]- Домашняя страница
- библиотека The Tecla — аналог readline, распространяется на условиях MIT-подобной лицензии
- библиотека libedit — аналог readline, распространяется на условиях лицензии BSD
- Bash Programmable-Completion
- GNU global: bash usage
- Страницы, использующие устаревший тег source
- Википедия:Статьи с источниками из Викиданных
- Страницы с неизвестными параметрами шаблона Программа
- ПРО:ИТ:Статьи по алфавиту
- ПРО:ИТ:Последняя правка: в текущем году
- Википедия:Статьи с незавершёнными разделами с февраля 2009 года
- Википедия:Статьи с незавершёнными разделами
- Википедия:Статьи с шаблонами недостатков по алфавиту
- Википедия:Статьи без ссылок на источники с декабря 2009 года
- Википедия:Статьи без источников (тип: библиотека функций)
- Википедия:Статьи без сносок с декабря 2009 года
- Википедия:Статьи без сносок
- Статьи с примерами кода Си
