Un outil pour des scripts shell glamour. Tirez parti de la puissance de Bubbles et Lip Gloss dans vos scripts et alias sans écrire de code Go !
L'exemple ci-dessus s'exécute à partir d'un seul script shell (source).
Gum fournit des utilitaires hautement configurables et prêts à l'emploi pour vous aider à écrire des scripts shell et des alias de fichiers dotfiles utiles avec seulement quelques lignes de code. Créons un script simple pour vous aider à écrire des validations conventionnelles pour vos fichiers dot.
Demandez le type de commit avec gum, choisissez :
gum choose " fix " " feat " " docs " " style " " refactor " " test " " chore " " revert "
Note
Cette commande elle-même s'imprimera sur la sortie standard, ce qui n'est pas très utile. Pour utiliser la commande ultérieurement, vous pouvez enregistrer la sortie standard dans un fichier $VARIABLE
ou file.txt
.
Demander la portée de ces modifications :
gum input --placeholder " scope "
Demander le résumé et la description des modifications :
gum input --value " $TYPE$SCOPE : " --placeholder " Summary of this change "
gum write --placeholder " Details of this change "
Confirmez avant de vous engager :
gum confirm " Commit changes? " && git commit -m " $SUMMARY " -m " $DESCRIPTION "
Consultez l'exemple complet pour combiner ces commandes dans un seul script.
Utilisez un gestionnaire de paquets :
# 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 téléchargez-le :
Ou installez-le simplement avec go
:
go install github.com/charmbracelet/gum@latest
choose
: Choisissez une option dans une liste de choixconfirm
: Demander à un utilisateur de confirmer une actionfile
: Choisissez un fichier dans un dossierfilter
: filtrer les éléments d'une listeformat
: Formater une chaîne à l'aide d'un modèleinput
: Demander une entréejoin
: Joindre le texte verticalement ou horizontalementpager
: faire défiler un fichierspin
: Afficher le spinner lors de l'exécution d'une commandestyle
: appliquer la coloration, les bordures et l'espacement au textetable
: Afficher un tableau de donnéeswrite
: Invite pour un texte longlog
: Enregistrer les messages à afficher Vous pouvez personnaliser les options et les styles gum
avec --flags
et $ENVIRONMENT_VARIABLES
. Voir gum <command> --help
pour une vue complète des options de personnalisation et de configuration de chaque commande.
Personnalisez avec --flags
:
gum input --cursor.foreground " #FF0 "
--prompt.foreground " #0FF "
--placeholder " What's up? "
--prompt " * "
--width 80
--value " Not much, hby? "
Personnalisez avec 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
Invite à saisir avec une simple commande.
gum input > answer.txt
gum input --password > password.txt
Demander du texte multiligne ( ctrl+d
pour terminer la saisie du texte).
gum write > story.txt
Filtrez une liste de valeurs avec une correspondance floue :
echo Strawberry >> flavors.txt
echo Banana >> flavors.txt
echo Cherry >> flavors.txt
gum filter < flavors.txt > selection.txt
Sélectionnez plusieurs options avec l'indicateur --limit
ou --no-limit
. Utilisez tab
ou ctrl+space
pour sélectionner, enter
pour confirmer.
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit
Choisissez une option dans une liste de choix.
echo " Pick a card, any card... "
CARD= $( gum choose --height 15 {{A,K,Q,J},{10..2}} " " {♠,♥,♣,♦} )
echo " Was your card the $CARD ? "
Vous pouvez également sélectionner plusieurs éléments avec l'indicateur --limit
ou --no-limit
, qui détermine le nombre maximum d'éléments pouvant être choisis.
cat songs.txt | gum choose --limit 5
cat foods.txt | gum choose --no-limit --header " Grocery Shopping "
Confirmez si vous souhaitez effectuer une action. Sorties avec le code 0
(affirmatif) ou 1
(négatif) selon la sélection.
gum confirm && rm file.txt || echo " File not removed "
Inviter l'utilisateur à sélectionner un fichier dans l'arborescence des fichiers.
EDITOR $( gum file $HOME )
Faites défiler un long document avec des numéros de ligne et une fenêtre d'affichage entièrement personnalisable.
gum pager < README.md
Afficher une double flèche lors de l'exécution d'un script ou d'une commande. Le spinner s'arrêtera automatiquement après la sortie de la commande donnée.
Pour afficher ou rediriger la sortie de la commande, utilisez l'indicateur --show-output
.
gum spin --spinner dot --title " Buying Bubble Gum... " -- sleep 5
Les types de spinner disponibles incluent : line
, dot
, minidot
, jump
, pulse
, points
, globe
, moon
, monkey
, meter
, hamburger
.
Sélectionnez une ligne parmi certaines données tabulaires.
gum table < flavors.csv | cut -d ' , ' -f 1
Imprimez joliment n'importe quelle chaîne avec n'importe quelle mise en page avec une seule commande.
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! '
Combinez du texte verticalement ou horizontalement. Utilisez cette commande avec gum style
pour créer des mises en page et de jolis résultats.
Astuce : placez toujours la sortie du gum style
entre guillemets pour conserver les nouvelles lignes ( n
) lorsque vous l'utilisez comme argument dans la commande 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
les processus et formater les corps de texte. gum format
peut analyser les démarques, les chaînes de modèles et les emojis nommés.
# 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
Pour plus d'informations sur les assistants de modèles, consultez la documentation Termenv. Pour une liste complète des emojis nommés, consultez l'API GitHub.
log
enregistre les messages sur le terminal en utilisant différents niveaux et styles à l'aide de la bibliothèque 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. "
Consultez le package time
Go pour connaître les formats --time
acceptables.
Voir charmbracelet/log
pour plus d'utilisation.
Comment utiliser gum
dans vos flux de travail quotidiens :
Consultez le répertoire d’exemples pour plus de cas d’utilisation réels.
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 "
Nous aimerions connaître votre avis sur ce projet. N'hésitez pas à nous laisser un message !
MIT
Une partie du charme.
Charm爱开源 • Charm aime l'open source