
На самом деле, в сфере справочной информации по Linux-командам есть кое-что хорошее и кое-что плохое. Хорошо здесь то, что в Linux уже давно имеется встроенная команда, позволяющая получать справочные сведения. Это — man (сокращение для manual — «руководство»). Если говорить о плохом, то можно отметить, что для получения справки нужно оставить текущее дело и выполнить команду man.
Существуют графические интерфейсы для man, вроде yelp, показанного на следующем рисунке.

Графический интерфейс для man
Для просмотра man-страниц можно даже пользоваться веб-браузером. Но ни один из этих способов получения справочной информации не связан с тем, что пользователь вводит при работе с командной строкой. Для получения справки нужно открывать новое окно, искать там материалы, а потом возвращаться к тому, что делалось до этого. Такое положение дел заставило меня задуматься о том, как создать нечто вроде встроенной системы контекстной помощи для bash.
При создании подобной справочной системы нужно, как и в случае с настройкой автозавершения ввода по нажатию клавиши Tab, учитывать две вещи: во-первых — нужна функция, выводящая справочные сведения, во-вторых — нужно некое средство, заставляющее readline в нужный момент вызвать эту функцию. Моя система представлена скриптом bashelp.sh, который решает обе вышеописанные задачи. Но он работает только тогда, когда задано значение переменной $DISPLAY, что указывает на то, что в настоящий момент используется графический терминал. В Mac, кстати, работа с графическим интерфейсом устроена не так. Поэтому если вы хотите пользоваться этим скриптом на Mac-компьютере, вам понадобится внести в скрипт некоторые изменения. Если вы сделаете это, и то, что у вас получится, заработает, я с удовольствием взгляну на ваш PR в репозиторий проекта или на форк проекта.
Скрипт позволяет задать клавиатурную команду, вызывающую справку. Я выбрал сочетание клавиш CTRL+Y. Команда bind, используемая в скрипте, полагает, что это сочетание клавиш выглядит как «\C-Y». Найти эту команду можно в верхней части кода скрипта. Вы можете выбрать другое сочетание клавиш. Там есть и ещё некоторые настройки. Например, man-справку можно открыть в отдельном окне терминала, или можно запустить графический вариант man. Подробности о настройке скрипта ищите в файле readme.
Сама функция вывода справки устроена очень просто. Если у вас нет графической системы X — она работать не будет (опять же — обратите внимание на $DISPLAY). Она ожидает, что данные от readline будут в $READLINE_LINE и $READLINE_POINT. Если данных нет — скрипт завершает работу. После этого функция берёт первое слово из строки — до пробела, а после этого обрабатывает все опции, что позволяет ей открыть справку в том виде, в котором нужно пользователю.
Конечно, это — лишь один из примеров того, что можно сделать, вмешиваясь в работу readline. Это — полезный приём, который пригодится тем, кто пользуется bash-скриптами или пишет их.
Если вы нуждаетесь в дополнительных настройках bash — вы, например, всегда можете поменять приглашение командной строки. А если вам, например, нужно, чтобы справочный скрипт возвращал бы фокус исходному окну, или закрывал бы открытое им окно в определённых обстоятельствах — взгляните на этот материал.
Применяете ли вы какие-нибудь особые приёмы при работе со справочными материалами по командам Linux?

ссылка на оригинал статьи https://habr.com/ru/company/ruvds/blog/528432/

Добавить комментарий