Uma ferramenta para scripts de shell glamorosos. Aproveite o poder do Bubbles e do Lip Gloss em seus scripts e aliases sem escrever nenhum código Go!
O exemplo acima está sendo executado a partir de um único script de shell (fonte).
O Gum fornece utilitários altamente configuráveis e prontos para uso para ajudá-lo a escrever scripts de shell úteis e aliases de dotfiles com apenas algumas linhas de código. Vamos construir um script simples para ajudá-lo a escrever commits convencionais para seus dotfiles.
Peça o tipo de commit com gum escolha:
gum choose " fix " " feat " " docs " " style " " refactor " " test " " chore " " revert "
Observação
Este comando em si será impresso em stdout, o que não é tão útil. Para usar o comando posteriormente, você pode salvar o stdout em $VARIABLE
ou file.txt
.
Solicitar o escopo dessas alterações:
gum input --placeholder " scope "
Solicitar o resumo e a descrição das alterações:
gum input --value " $TYPE$SCOPE : " --placeholder " Summary of this change "
gum write --placeholder " Details of this change "
Confirme antes de confirmar:
gum confirm " Commit changes? " && git commit -m " $SUMMARY " -m " $DESCRIPTION "
Confira o exemplo completo para combinar esses comandos em um único script.
Use um gerenciador de pacotes:
# 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
Ou baixe:
Ou apenas instale-o com go
:
go install github.com/charmbracelet/gum@latest
choose
: Escolha uma opção em uma lista de opçõesconfirm
: peça a um usuário para confirmar uma açãofile
: escolha um arquivo de uma pastafilter
: Filtre itens de uma listaformat
: formata uma string usando um modeloinput
: Solicita alguma entradajoin
: junta texto verticalmente ou horizontalmentepager
: percorrer um arquivospin
: exibe o spinner ao executar um comandostyle
: aplique cores, bordas e espaçamento ao textotable
: Renderiza uma tabela de dadoswrite
: Solicita texto de formato longolog
: registra mensagens para saída Você pode personalizar opções e estilos gum
com --flags
e $ENVIRONMENT_VARIABLES
. Consulte gum <command> --help
para uma visão completa das opções de personalização e configuração de cada comando.
Personalize com --flags
:
gum input --cursor.foreground " #FF0 "
--prompt.foreground " #0FF "
--placeholder " What's up? "
--prompt " * "
--width 80
--value " Not much, hby? "
Personalize com 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
Solicita entrada com um comando simples.
gum input > answer.txt
gum input --password > password.txt
Solicita algum texto de várias linhas ( ctrl+d
para concluir a entrada de texto).
gum write > story.txt
Filtre uma lista de valores com correspondência difusa:
echo Strawberry >> flavors.txt
echo Banana >> flavors.txt
echo Cherry >> flavors.txt
gum filter < flavors.txt > selection.txt
Selecione várias opções com o sinalizador --limit
ou --no-limit
. Use tab
ou ctrl+space
para selecionar, enter
para confirmar.
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit
Escolha uma opção em uma lista de opções.
echo " Pick a card, any card... "
CARD= $( gum choose --height 15 {{A,K,Q,J},{10..2}} " " {♠,♥,♣,♦} )
echo " Was your card the $CARD ? "
Você também pode selecionar vários itens com o sinalizador --limit
ou --no-limit
, que determina o máximo de itens que podem ser escolhidos.
cat songs.txt | gum choose --limit 5
cat foods.txt | gum choose --no-limit --header " Grocery Shopping "
Confirme se deseja executar uma ação. Sai com código 0
(afirmativo) ou 1
(negativo) dependendo da seleção.
gum confirm && rm file.txt || echo " File not removed "
Solicita ao usuário que selecione um arquivo na árvore de arquivos.
EDITOR $( gum file $HOME )
Percorra um documento longo com números de linha e uma janela de visualização totalmente personalizável.
gum pager < README.md
Exiba um controle giratório ao executar um script ou comando. O controle giratório irá parar automaticamente após a saída do comando fornecido.
Para visualizar ou canalizar a saída do comando, use o sinalizador --show-output
.
gum spin --spinner dot --title " Buying Bubble Gum... " -- sleep 5
Os tipos de spinner disponíveis incluem: line
, dot
, minidot
, jump
, pulse
, points
, globe
, moon
, monkey
, meter
, hamburger
.
Selecione uma linha de alguns dados tabulares.
gum table < flavors.csv | cut -d ' , ' -f 1
Imprima qualquer string com qualquer layout com um comando.
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! '
Combine texto verticalmente ou horizontalmente. Use este comando com gum style
para criar layouts e resultados bonitos.
Dica: Sempre coloque a saída do gum style
entre aspas para preservar as novas linhas ( n
) ao usá-lo como argumento no comando 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
processa e formata corpos de texto. gum format
pode analisar markdown, strings de modelo e emojis nomeados.
# 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
Para obter mais informações sobre auxiliares de modelo, consulte a documentação do Termenv. Para obter uma lista completa de emojis nomeados, consulte a API do GitHub.
log
registra mensagens no terminal usando diferentes níveis e estilos usando a biblioteca 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. "
Consulte o pacote Go time
para formatos --time
aceitáveis.
Veja charmbracelet/log
para mais uso.
Como usar gum
em seus fluxos de trabalho diários:
Consulte o diretório de exemplos para mais casos de uso do mundo real.
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
simples. 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 "
Adoraríamos ouvir sua opinião sobre este projeto. Sinta-se à vontade para nos deixar uma mensagem!
MIT
Parte do charme.
Charm热爱开源 • Charm adora código aberto