Например, при вводе строки с использованием 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) —
В файлах конфигурации помимо простого переназначения функций редактирования новым «клавиатурным сочетаниям» можно создать достаточно нетривиальные макросы для выполнения специальных задач. Вот несколько примеров:
"\e[A~":"\C-aman " — При нажатии F1 в начало строки добавляется "man "
"\ee":"\C-a/etc/init.d/ restart\e[5D\C-b" — При нажатии Alt+E (или последовательном EscE) в начало командной строки вводится текст /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.
#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 pathsnprintf(shell_prompt,sizeof(shell_prompt),"%s:%s $ ",getenv("USER"),getcwd(NULL,1024));// inputing...input=readline(shell_prompt);// eofif(!input)break;// path autocompletion when tabulation hitrl_bind_key('\t',rl_complete);// adding the previous input into historyadd_history(input);/* do stuff */// Т. к. вызов readline() выделяет память, но не освобождает (а возвращает), то эту память нужно вернуть (освободить).free(input);}}