Меню

Главная
Случайная статья
Настройки
GNU Readline
Материал из https://ru.wikipedia.org

GNU readline — свободная библиотека для интерфейса командной строки и обработки строк. Создана и поддерживается в рамках проекта GNU. Библиотека распространяется на условиях GNU General Public License. Последние версии библиотеки позволяют работать с многобайтовыми кодировками (Unicode).

Например, при вводе строки с использованием readline нажатие C-b (Ctrl+B) передвигает курсор на одну позицию назад, тогда как

Содержание

Конфигурация и примеры

После установки readline полезно будет настроить под себя возможности редактирования в командной строке. Для этого нужно отредактировать один из конфигурационных файлов:
  • /etc/inputrc — глобальный файл конфигурации для всех пользователей;
  • ~/.inputrc — файл конфигурации для отдельных пользователей, хранимый в их домашнем каталоге;


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

Формат файла конфигурации
  • Комментарии — начинаются с символа #
  • Назначения значений переменным конфигурации — пример: set meta-flag on
  • Управляющие директивы — примеры: $if mode=emacs
  • Назначения функций или макросов клавиатурным сочетаниям (англ. keyseq) —


Клавиатурные сочетания

Команда bind.

Интересные примеры макросов

В файлах конфигурации помимо простого переназначения функций редактирования новым «клавиатурным сочетаниям» можно создать достаточно нетривиальные макросы для выполнения специальных задач. Вот несколько примеров:
  • "\e[A~":"\C-aman " — При нажатии
  • "\ee":"\C-a/etc/init.d/ restart\e[5D\C-b" — При нажатии
  • "\ew":"ping -c 3 -w 5 -R rbc.ru\e[5D\e[5D" — При нажатии


Нетривиальные примеры

Помимо ввода текста и выполнения функций редактирования, клавишам можно назначить немедленное выполнение программ или сценариев. Причём можно использовать возвращаемый в ходе выполнения программ текст для вставки его в редактируемую строку. Например, можно запрограммировать readline, чтобы при вводе определённой команды в качестве её аргументов можно было интерактивно подставлять с помощью функции

Пример кода

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


Примечания
  1. Ramey C. Readline-8.3-release available (англ.) — 2025.
  2. readline.git - The GNU Readline library


Ссылки
Downgrade Counter