Инструмент для гламурных сценариев оболочки. Используйте возможности Bubbles и Lip Gloss в своих скриптах и псевдонимах без написания кода Go!
Приведенный выше пример запускается из одного сценария оболочки (исходный код).
Gum предоставляет легко настраиваемые, готовые к использованию утилиты, которые помогут вам написать полезные сценарии оболочки и псевдонимы точечных файлов с помощью всего лишь нескольких строк кода. Давайте создадим простой скрипт, который поможет вам писать обычные коммиты для ваших точечных файлов.
Запросите тип фиксации с помощью резинки, выберите:
gum choose " fix " " feat " " docs " " style " " refactor " " test " " chore " " revert "
Примечание
Эта команда сама будет печатать на стандартный вывод, что не так уж и полезно. Чтобы использовать команду позже, вы можете сохранить стандартный вывод в $VARIABLE
или file.txt
.
Подскажите масштаб этих изменений:
gum input --placeholder " scope "
Запрос на краткую информацию и описание изменений:
gum input --value " $TYPE$SCOPE : " --placeholder " Summary of this change "
gum write --placeholder " Details of this change "
Подтвердите перед фиксацией:
gum confirm " Commit changes? " && git commit -m " $SUMMARY " -m " $DESCRIPTION "
Ознакомьтесь с полным примером объединения этих команд в одном скрипте.
Используйте менеджер пакетов:
# macOS or Linux
brew install gum
# Arch Linux (btw)
pacman -S gum
# Nix
nix-env -iA nixpkgs.gum
# Flox
flox install gum
# Windows (via WinGet or Scoop)
winget install charmbracelet.gum
scoop install charm-gum
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg
echo " deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * * " | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install gum
echo ' [charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=1
gpgkey=https://repo.charm.sh/yum/gpg.key ' | sudo tee /etc/yum.repos.d/charm.repo
sudo rpm --import https://repo.charm.sh/yum/gpg.key
# yum
sudo yum install gum
# zypper
sudo zypper refresh
sudo zypper install gum
Или скачайте:
Или просто установите его с помощью go
:
go install github.com/charmbracelet/gum@latest
choose
: выберите вариант из списка вариантов.confirm
: попросите пользователя подтвердить действие.file
: выберите файл из папкиfilter
: Фильтровать элементы из списка.format
: форматирует строку с использованием шаблона.input
: Запросить ввод данныхjoin
: соединить текст вертикально или горизонтально.pager
: прокручивать файлspin
: отображать счетчик во время выполнения команды.style
: применение цвета, границ и интервалов к тексту.table
: Отобразить таблицу данных.write
: запросить длинный текст.log
: Записывать сообщения для вывода Вы можете настроить параметры и стили gum
с помощью --flags
и $ENVIRONMENT_VARIABLES
. См. gum <command> --help
для получения полного представления о параметрах настройки и конфигурации каждой команды.
Настройте с помощью --flags
:
gum input --cursor.foreground " #FF0 "
--prompt.foreground " #0FF "
--placeholder " What's up? "
--prompt " * "
--width 80
--value " Not much, hby? "
Настройте с помощью ENVIRONMENT_VARIABLES
:
export GUM_INPUT_CURSOR_FOREGROUND= " #FF0 "
export GUM_INPUT_PROMPT_FOREGROUND= " #0FF "
export GUM_INPUT_PLACEHOLDER= " What's up? "
export GUM_INPUT_PROMPT= " * "
export GUM_INPUT_WIDTH=80
# --flags can override values set with environment
gum input
Запросить ввод с помощью простой команды.
gum input > answer.txt
gum input --password > password.txt
Запросить многострочный текст ( ctrl+d
для завершения ввода текста).
gum write > story.txt
Отфильтруйте список значений с нечетким соответствием:
echo Strawberry >> flavors.txt
echo Banana >> flavors.txt
echo Cherry >> flavors.txt
gum filter < flavors.txt > selection.txt
Выберите несколько вариантов с помощью флага --limit
или --no-limit
. Используйте tab
или ctrl+space
для выбора, enter
для подтверждения.
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit
Выберите вариант из списка вариантов.
echo " Pick a card, any card... "
CARD= $( gum choose --height 15 {{A,K,Q,J},{10..2}} " " {♠,♥,♣,♦} )
echo " Was your card the $CARD ? "
Вы также можете выбрать несколько элементов с помощью флага --limit
или --no-limit
, который определяет максимальное количество элементов, которые можно выбрать.
cat songs.txt | gum choose --limit 5
cat foods.txt | gum choose --no-limit --header " Grocery Shopping "
Подтвердите, выполнять ли действие. Выход с кодом 0
(утвердительный) или 1
(отрицательный) в зависимости от выбора.
gum confirm && rm file.txt || echo " File not removed "
Предложите пользователю выбрать файл из дерева файлов.
EDITOR $( gum file $HOME )
Прокрутите длинный документ с номерами строк и полностью настраиваемым окном просмотра.
gum pager < README.md
Отображение счетчика во время выполнения сценария или команды. Счетчик автоматически остановится после завершения выполнения данной команды.
Чтобы просмотреть или передать вывод команды, используйте флаг --show-output
.
gum spin --spinner dot --title " Buying Bubble Gum... " -- sleep 5
Доступные типы счетчиков: line
, dot
, minidot
, jump
, pulse
, points
, globe
, moon
, monkey
, meter
, hamburger
.
Выберите строку из некоторых табличных данных.
gum table < flavors.csv | cut -d ' , ' -f 1
Довольно распечатать любую строку с любым макетом с помощью одной команды.
gum style
--foreground 212 --border-foreground 212 --border double
--align center --width 50 --margin " 1 2 " --padding " 2 4 "
' Bubble Gum (1¢) ' ' So sweet and so fresh! '
Объедините текст по вертикали или по горизонтали. Используйте эту команду со gum style
для создания макетов и красивого вывода.
Совет: Всегда заключайте вывод gum style
в кавычки, чтобы сохранить символы новой строки ( n
) при использовании его в качестве аргумента в команде join
.
I= $( gum style --padding " 1 5 " --border double --border-foreground 212 " I " )
LOVE= $( gum style --padding " 1 4 " --border double --border-foreground 57 " LOVE " )
BUBBLE= $( gum style --padding " 1 8 " --border double --border-foreground 255 " Bubble " )
GUM= $( gum style --padding " 1 5 " --border double --border-foreground 240 " Gum " )
I_LOVE= $( gum join " $I " " $LOVE " )
BUBBLE_GUM= $( gum join " $BUBBLE " " $GUM " )
gum join --align center --vertical " $I_LOVE " " $BUBBLE_GUM "
format
процессы и форматируют текстовые фрагменты. gum format
может анализировать уценку, строки шаблона и именованные смайлы.
# Format some markdown
gum format -- " # Gum Formats " " - Markdown " " - Code " " - Template " " - Emoji "
echo " # Gum Formatsn- Markdownn- Coden- Templaten- Emoji " | gum format
# Syntax highlight some code
cat main.go | gum format -t code
# Render text any way you want with templates
echo ' {{ Bold "Tasty" }} {{ Italic "Bubble" }} {{ Color "99" "0" " Gum " }} '
| gum format -t template
# Display your favorite emojis!
echo ' I :heart: Bubble Gum :candy: ' | gum format -t emoji
Дополнительную информацию о помощниках шаблонов см. в документации Termenv. Полный список именованных смайлов см. в API GitHub.
log
регистрирует сообщения на терминале на разных уровнях и в стиле, используя библиотекуcharmbracelet charmbracelet/log
.
# Log some debug information.
gum log --structured --level debug " Creating file... " name file.txt
# DEBUG Unable to create file. name=temp.txt
# Log some error.
gum log --structured --level error " Unable to create file. " name file.txt
# ERROR Unable to create file. name=temp.txt
# Include a timestamp.
gum log --time rfc822 --level error " Unable to create file. "
См. пакет Go time
для получения информации о приемлемых форматах --time
.
См. charmbracelet/log
для получения дополнительной информации об использовании.
Как использовать gum
в повседневной работе:
См. каталог примеров, чтобы узнать больше о реальных примерах использования.
git commit -m " $( gum input --width 50 --placeholder " Summary of changes " ) "
-m " $( gum write --width 80 --placeholder " Details of changes " ) "
$EDITOR
$EDITOR $( gum filter )
tmux
SESSION= $( tmux list-sessions -F # S | gum filter --placeholder " Pick session... " )
tmux switch-client -t $SESSION || tmux attach -t $SESSION
git
. git log --oneline | gum filter | cut -d ' ' -f1 # | copy
skate
. skate list -k | gum filter | xargs skate get
brew list | gum choose --no-limit | xargs brew uninstall
git
git branch | cut -c 3- | gum choose --no-limit | xargs git branch -D
gh
gh pr list | cut -f1,2 | gum choose | cut -f1 | xargs gh pr checkout
gum filter < $HISTFILE --height 20
sudo
alias please= " gum input --password | sudo -nS "
Мы хотели бы услышать ваши мысли об этом проекте. Не стесняйтесь, напишите нам!
Массачусетский технологический институт
Часть очарования.
Charm热爱开源 • Charm любит открытый исходный код