VOOZH about

URL: https://ru.wikipedia.org/wiki/GNU_readline

⇱ GNU Readline — Википедия


Перейти к содержанию
Материал из Википедии — свободной энциклопедии
(перенаправлено с «GNU readline»)
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) —
Этот раздел нужно дополнить.
Пожалуйста, улучшите и дополните раздел. (25 февраля 2009)

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

[править | править код]

Команда 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);
}
}

Примечания

[править | править код]
У этой статьи есть 2 проблемы, помогите их исправить:
Информация должна быть проверяема, иначе она может быть удалена. Вы можете отредактировать статью, добавив ссылки на авторитетные источники в виде сносок. (10 декабря 2009)
В статье есть список источников, но не хватает сносок.
Без сносок сложно определить, из какого источника взято каждое отдельное утверждение. Вы можете улучшить статью, проставив сноски на источники, подтверждающие информацию. Сведения без сносок могут быть удалены. (10 декабря 2009)
Пожалуйста, после исправления проблемы удалите соответствующий шаблон. Узнать, как это сделать, можно на справочной странице.