GUM – инструмент для создания интерактивных скриптов. Linux статьи
Написать статью
Войдите, чтобы писать статьи

GUM — инструмент для создания интерактивных скриптов

13

Настройка GUM скрипты

Материал написан пользователем сайта.

Gum является частью более крупного проекта Charm, который представляет собой набор библиотек, написанных на языке Go, для создания приложений командной строки. Gum является "инструментом для гламурных сценариев оболочки" - как указано на официальной страничке проекта. С применением Gum, скрипты обретают привлекательность и интерактивность, становятся более понятными и простыми для восприятия.

Установка и настройка

Процесс установки достаточно прост: для популярных дистрибутивов - через менеджер пакетов; для остальных случаев можно воспользоваться готовыми сборками и бинарниками - https://github.com/charmbracelet/gum/releases; или просто установить последнюю версию Gum с помощью Golang в домашний каталог:

go install github.com/charmbracelet/gum@latest

В Calculate, для которого нет готовой сборки, я воспользовался последним методом. В таком случае, рекомендую добавить путь к исполняемому файлу в системные пути, чтобы gum автоматически запускался при его вызове, как показано на скриншоте ниже:

Команды утилиты Gum

  1. choose: интерактивный выбор из списка
  2. confirm: запрос на подтверждение действия
  3. file: выбор файла из директории
  4. filter: фильтрация списка по заданным параметрам
  5. format: форматирование вывода по определенному сценарию
  6. input: запрос на ввод данных
  7. join: объединение текста
  8. log: вывод информационных сообщений
  9. pager: включение прокрутки с номерами строк в длинный вывод
  10. spin: включение спиннера на время выполнения команды
  11. style: применение различных стилей (цвет, рамка, шрифт)
  12. table: выбор строки из таблицы данных
  13. write: ввод многострочной текстовой информации

По каждой команде Gum доступна справка, например:

gum choose -h

Подробное описание команд Gum с демонстрацией их возможностей доступно на официальной страничке проекта, там же выложены тестовые скрипты с примерами использования утилиты в них. 

Практическое применение

В следующей части статьи покажу на примере собственных скриптов практическое применение в них утилиты Gum.

Пример 1: создание скрипта, автоматизирующего выбор тем для различных меню rofi, используемых пользователем. В моем wm qtile используется rofi в качестве диспетчера меню. Помимо главного меню приложений, используются меню для вызова различных опций запуска mpv player, утилиты скриншотов (анимированных в том числе), скриптов пользователя, меню управления питанием. Для каждого из них настроен свой файл конфигурации rofi, в зависимости от требуемого функционала.

Темы оформления вынес в отдельные файлы, в которых прописаны настройки цветов, шрифтов, иконок и рамок. Чтобы при смене темы не заниматься правкой каждого из файлов конфигурации различных меню rofi, поставил себе задачу автоматизировать этот процесс с помощью скрипта, добавив ему красок и интерактивности. Файлы тем размещены в отдельном каталоге ~/.config/rofi/themes. Скрипт читает их, выводя имена в виде списка, и ожидает выбор пользователя. Потом запрашивает подтверждение на применение выбранной темы, которая при положительном ответе записывается в отдельный файл, ссылка на который размещена в файле конфигурации меню rofi. Как говорится: "лучше один раз увидеть, чем сто раз услышать". Ниже представлена демонстрация работы скрипта:

rtheme.sh

После выбора и установки тем (в нашем примере это 2 различных темы: MyLight и MyBlack), меню rofi будут выглядеть так:

Пример 2: создание скрипта для "склейки" скриншотов. Данный функционал мной востребован крайне редко, поэтому не держу в системе GUI редакторов изображений, мне более чем достаточно функционала image magick. Ниже - демонстрация работы скрипта, в ходе которого пользователь выбирает файлы изображений, которые нужно склеить, выбирает формат склейки и подтверждает действие. Итоговый файл записывается в тот же каталог, где находятся исходные файлы с уникальным именем, содержащим дату и время его создания.

Пример 3: файл изображений формата *.png часто имеет большой размер, а для размещения на веб-ресурсах требуется более скромный. Скрипт, представленный на демонстрации ниже, выдает запрос пользователю на выбор директории и png-файла, после выбора которых пользователю остается лишь подтвердить действие по конвертации изображения в формат с бОльшим сжатием *.jpg:

Итоговый вариант обработки скриншотов этими скриптами (склейка + конвертация) выглядит так:

rtheme.sh   merge_img.sh   convert-to-jpg.sh

Пример 4: преобразование вывода списка шрифтов, установленных в системе, в приятный для глаз формат, используя команду стилей gum:

fontsearch.sh

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

extract.sh

В качестве заключения

Очень надеюсь, что мне удалось продемонстрировать некоторые из возможностей Gum, которые позволяют придать красок и интерактивности скриптам оболочки. Лично для себя нахожу данный проект интересным, слежу за его развитием и с удовольствием использую в своих скриптах.

Лайков: +18
войдите, чтобы ставить лайки
13
  • Опубликовано: 03.08.2024
  • scorpii

Комментарии

vantiki
Активный пользователь
Активный
03.08.2024
12:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
Даже не знаю, что сказать, круто!

Мне лично интерактивные скрипты ни к чему, но тот, кто часто что-то разворачивает, будь то конфигурации сервера или rice в Hyprland, то прям must have.

Про GUM этот первый раз слышу, но штуковина полезная. И скрипты, и мороженое в стаканчике, и дорогие сумки. Всё в одном.
LexD
Активный пользователь
Активный
03.08.2024
12:22
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
1. Поначалу хотел было придраться к именованию файлов в виде ДД.ММ.ГГГГ ЧЧ-ММ, поскольку логичнее (хотя это дело вкуса) было бы использовать вид ГГГГ-ММ-ДД,
но ниже увидел как раз вид ГГГГ-ММ-ДД.

2. Ещё год назад не особо (совсем не) понимал всю мощь и гибкость работы в терминале, предпочитал исключительно графический интерфейс.
Не скажу, что сейчас пользуюсь только терминалом, но всё же поболее.
Про GUM впервые слышу. Познавательно.

3. Как и в предыдущей статье отмечу GIF.
Наглядно.
choice
Активный пользователь
Активный
03.08.2024
13:20
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Супер! Про GUM не знал, гифки - очень эффектно, понравилась анимация Writing ...
Раньше, при прохождении всяких курсов и при возне в wifislax писал скрипты, а сейчас только смотрю их, задор уже не тот.
scorpii
Активный пользователь
Активный
03.08.2024
17:14
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийchoiceРодительский комментарий
0
войдите, чтобы ставить лайки
Я тоже случайно узнал, увидев в презентации Stephan Raabe очередной версии dotfiles на youtube красивые скрипты. В коде смотрю, - он использует какой-то gum. Попробовал, понравилось, стал изучать глубже. Переделал все свои скрипты. На этой волне замутил скрипты для выбора тем оформления rofi, gtk. По-скольку много (чаще) работаю с vifm, переделал скрипт распаковки архивов, добавив интерактивности и функционала в части поддержки различных архивов.
xKDE
Активный пользователь
Активный
03.08.2024
14:43
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Зачетные рюшки для консоли)))
DrSheppard
Активный пользователь
Активный
04.08.2024
12:42
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Будет ли мой скрипт портабельным, т.е. нужно ли мне для запуска на другом компьютере поставлять gum?
scorpii
Активный пользователь
Активный
04.08.2024
18:13
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийDrSheppardРодительский комментарий
0
войдите, чтобы ставить лайки
конечно, без установленного gum работать не будет
DrSheppard
Активный пользователь
Активный
04.08.2024
19:07
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
Получается мне проще использовать какой-нибудь bash-simple-curses или pkm, чем делать красивый скрипт который нигде не запустится кроме домашней системы
scorpii
Активный пользователь
Активный
04.08.2024
19:56
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийDrSheppardРодительский комментарий
0
войдите, чтобы ставить лайки
Не вижу проблем с установкой тулзы. Например, скрипт распаковки архивов: пока не установлен unzip, архивы не распакуются, но это не повод отказаться от файла архива zip.
asu
04.08.2024
22:33
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
простой пользователь - но заинтересовало, можно массу интересных вещей сделать, в чём-то автоматизировать рутину
xKDE
Активный пользователь
Активный
05.08.2024
04:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийasuРодительский комментарий
+1
войдите, чтобы ставить лайки
Для этого Вам даже gum не нужен. Почитайте про bash-скрипты в целом, там много интересного.
Akulina
05.08.2024
13:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Хм. А что мешает в скриптах использовать ncurses?
scorpii
Активный пользователь
Активный
07.08.2024
19:47
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийAkulinaРодительский комментарий
0
войдите, чтобы ставить лайки
Ничего, но речь в статье про другой инструмент.

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила