GNU readline | это... Что такое GNU readline? (original) (raw)
GNU readline
Тип | Библиотека |
---|---|
Автор | Брайан Фокс |
Разработчик | Чет Рамэй |
Написана на | C |
Операционная система | Различные |
Первый выпуск | 1989 |
Последняя версия | 6.2 (14 февраля 2011) |
Лицензия | GNU General Public License |
Сайт | Официальный вебсайт |
GNU readline — свободная библиотека для интерфейса командной строки и обработки строк. Создана и поддерживается в рамках проекта GNU. Библиотека распространяется на условиях GNU General Public License. Текущая версия библиотеки — 6.1. Последние версии библиотеки позволяют работать с многобайтовыми кодировками (Unicode).
Например, при вводе строки с использованием readline, нажатие C-b ( Ctrl + B ) передвигает курсор на одну позицию назад, тогда как Ctrl + F передвигает курсор на одну позицию вперёд; нажатие Ctrl + R позволяет произвести поиск команд среди ранее введённых; использование этих клавиш пришло из одной из старейших и популярнейших программ проекта GNU — текстового редактора Emacs (описаны назначенные по умолчанию клавиши, но это назначение можно изменить, сделав его подобным применяемому в редакторе vi). Кроме того, readline поддерживает буфер обмена и дополнение имени команды по первым символам при нажатии клавиши Tab ⇆ . Readline является кросс-платформеной библиотекой, а значит позволяет многим программам сохранить одинаковое поведение при вводе строки пользователем даже при переходе на другую платформу.
Содержание
Конфигурация и примеры
После установки readline полезно будет настроить под себя возможности редактирования в командной строке. Для этого нужно отредактировать один из конфигурационных файлов:
- /etc/inputrc — глобальный файл конфигурации для всех пользователей;
- ~/.inputrc — файл конфигурации для отдельных пользователей, хранимый в их домашнем каталоге;
Не следует забывать — readline является библиотекой, а не самостоятельной утилитой, и поэтому те программы, которые используют readline могут иметь собственные файлы конфигурации, в которых определяется поведение библиотеки для решения специальных задач.
Формат файла конфигурации
- Комментарии — начинаются с символа #
- Назначения значений переменным конфигурации — пример: set meta-flag on
- Управляющие директивы — примеры: $if mode=emacs
- Назначения функций или макросов клавиатурным сочетаниям (англ. keyseq) —
Клавиатурные сочетания
Команда bind.
Интересные примеры макросов
В файлах конфигурации помимо простого переназначения функций редактирования новым «клавиатурным сочетаниям» можно создать достаточно нетривиальные макросы для выполнения специальных задач. Вот несколько примеров:
"\e[A~":"\C-aman "
— При нажатии F1 в начало строки добавляется "man ""\ee":"\C-a/etc/init.d/ restart\e[5D\C-b"
— При нажатии Alt + E (или последовательном Esc E ) в начало командной строки вводится текст /etc/init.d/ restart, после чего курсор сдвигается на одно слово и символ назад."\ew":"ping -c 3 -w 5 -R rbc.ru\e[5D\e[5D"
— При нажатии Alt + W , выводит ping -c 3 -w 5 -R rbc.ru и переводит курсор к rbc.ru.
Нетривиальные примеры
Помимо ввода текста и выполнения функций редактирования клавишам можно назначить немедленное выполнение программ или сценариев. Причём можно использовать возвращаемый в ходе выполнения программ текст для вставки его в редактируемую строку. Например, можно запрограммировать readline, чтобы при вводе определённой команды в качестве её аргументов можно было интерактивно подставлять с помощью функции Tab ⇆ не только имена файлов/каталогов, но и определённые параметры, специфичные именно для этой команды. Для настройки автодополнения используют команду complete.
Пример кода
Следующий код написан на C :
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <readline/readline.h> #include <readline/history.h>
int main() { char* input, shell_prompt[100];
for(;;)
{
// getting the current user 'n path
snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));
// inputing...
input = readline(shell_prompt);
// eof
if (input==NULL)
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);
}
}
Ссылки
- Домашняя страница
- библиотека The Tecla — аналог readline, распространяется на условиях MIT-подобной лицензии
- библиотека libedit — аналог readline, распространяется на условиях лицензии BSD
- Bash Programmable-Completion
- Автодополнение в bash и mc
- GNU global: bash usage
Проект GNU | ||
---|---|---|
История | Манифест GNU • Проект GNU • Фонд свободного программного обеспечения (история) | |
Лицензии | GNU GPL • GNU LGPL • Affero GPL • GNU FDL • GPL linking exception | |
Программноеобеспечение | GNU (варианты) • Hurd • GNOME • Bash • GCC • GNU Emacs • glibc • GNU Coreutils • Autotools • GNUnet • GNUzilla (IceCat) • Gnash • другие пакеты | |
Персоналии | Александре Олива • Бенджамин Хилл • Брэдли Кун • Эбен Моглен • Федерико Хейнц • Джордж Грив • Георг Греве • Джошуа Гэй • Лоис Дечэри • Мэтт Ли • Рикардо Галли • Ричард Столлман • Роберт Часселл • Вильям Джон Салливан | |
Другие темы | Спор об именовании GNU/Linux • Revolution OS • BadVista • Defective by Design |