Ein Tool für glamouröse Shell-Skripte. Nutzen Sie die Leistungsfähigkeit von Bubbles und Lip Gloss in Ihren Skripten und Aliasen, ohne Go-Code schreiben zu müssen!
Das obige Beispiel wird von einem einzelnen Shell-Skript ausgeführt (Quelle).
Gum bietet hochgradig konfigurierbare, gebrauchsfertige Dienstprogramme, mit denen Sie mit nur wenigen Codezeilen nützliche Shell-Skripte und Dotfiles-Aliase schreiben können. Lassen Sie uns ein einfaches Skript erstellen, das Ihnen beim Schreiben konventioneller Commits für Ihre Dotfiles hilft.
Fragen Sie nach dem Commit-Typ mit Gum und wählen Sie:
gum choose " fix " " feat " " docs " " style " " refactor " " test " " chore " " revert "
Notiz
Dieser Befehl selbst wird auf stdout ausgegeben, was nicht besonders nützlich ist. Um den Befehl später verwenden zu können, können Sie die Standardausgabe in einer $VARIABLE
oder file.txt
speichern.
Informieren Sie sich über den Umfang dieser Änderungen:
gum input --placeholder " scope "
Fordern Sie eine Zusammenfassung und Beschreibung der Änderungen an:
gum input --value " $TYPE$SCOPE : " --placeholder " Summary of this change "
gum write --placeholder " Details of this change "
Bestätigen Sie vor dem Festschreiben:
gum confirm " Commit changes? " && git commit -m " $SUMMARY " -m " $DESCRIPTION "
Schauen Sie sich das vollständige Beispiel für die Kombination dieser Befehle in einem einzigen Skript an.
Verwenden Sie einen Paketmanager:
# 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
Oder laden Sie es herunter:
Oder installieren Sie es einfach mit go
:
go install github.com/charmbracelet/gum@latest
choose
: Wählen Sie eine Option aus einer Liste mit Auswahlmöglichkeitenconfirm
: Bitten Sie einen Benutzer, eine Aktion zu bestätigenfile
: Wählen Sie eine Datei aus einem Ordner ausfilter
: Elemente aus einer Liste filternformat
: Formatieren Sie eine Zeichenfolge mithilfe einer Vorlageinput
: Aufforderung zur Eingabejoin
: Text vertikal oder horizontal verbindenpager
: Durch eine Datei scrollenspin
: Zeigt den Spinner an, während ein Befehl ausgeführt wirdstyle
: Wenden Sie Farben, Ränder und Abstände auf den Text antable
: Rendern Sie eine Datentabellewrite
: Aufforderung zur Eingabe von Langtextlog
: Protokollieren Sie die auszugebenden Nachrichten Sie können gum
-Optionen und -Stile mit --flags
und $ENVIRONMENT_VARIABLES
anpassen. Eine vollständige Übersicht über die Anpassungs- und Konfigurationsoptionen jedes Befehls finden Sie gum <command> --help
.
Anpassen mit --flags
:
gum input --cursor.foreground " #FF0 "
--prompt.foreground " #0FF "
--placeholder " What's up? "
--prompt " * "
--width 80
--value " Not much, hby? "
Anpassen mit 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
Mit einem einfachen Befehl zur Eingabe auffordern.
gum input > answer.txt
gum input --password > password.txt
Fordern Sie mehrzeiligen Text an ( ctrl+d
um die Texteingabe abzuschließen).
gum write > story.txt
Filtern Sie eine Werteliste mit Fuzzy-Matching:
echo Strawberry >> flavors.txt
echo Banana >> flavors.txt
echo Cherry >> flavors.txt
gum filter < flavors.txt > selection.txt
Wählen Sie mehrere Optionen mit dem Flag --limit
oder --no-limit
aus. Verwenden Sie zum Auswählen tab
oder ctrl+space
und enter
zum Bestätigen die Eingabetaste ein.
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit
Wählen Sie eine Option aus einer Liste mit Auswahlmöglichkeiten.
echo " Pick a card, any card... "
CARD= $( gum choose --height 15 {{A,K,Q,J},{10..2}} " " {♠,♥,♣,♦} )
echo " Was your card the $CARD ? "
Sie können auch mehrere Elemente mit dem Flag --limit
oder --no-limit
auswählen, das die maximale Anzahl an Elementen bestimmt, die ausgewählt werden können.
cat songs.txt | gum choose --limit 5
cat foods.txt | gum choose --no-limit --header " Grocery Shopping "
Bestätigen Sie, ob eine Aktion ausgeführt werden soll. Wird je nach Auswahl mit dem Code 0
(bejahend) oder 1
(negativ) beendet.
gum confirm && rm file.txt || echo " File not removed "
Fordern Sie den Benutzer auf, eine Datei aus dem Dateibaum auszuwählen.
EDITOR $( gum file $HOME )
Scrollen Sie durch ein langes Dokument mit Zeilennummern und einem vollständig anpassbaren Ansichtsfenster.
gum pager < README.md
Zeigen Sie einen Spinner an, während Sie ein Skript oder einen Befehl ausführen. Der Spinner stoppt automatisch, nachdem der angegebene Befehl beendet wurde.
Um die Ausgabe des Befehls anzuzeigen oder weiterzuleiten, verwenden Sie das Flag --show-output
.
gum spin --spinner dot --title " Buying Bubble Gum... " -- sleep 5
Zu den verfügbaren Spinnertypen gehören: line
, dot
, minidot
, jump
, pulse
, points
, globe
, moon
, monkey
, meter
, hamburger
.
Wählen Sie eine Zeile aus einigen Tabellendaten aus.
gum table < flavors.csv | cut -d ' , ' -f 1
Drucken Sie mit einem Befehl jede beliebige Zeichenfolge mit beliebigem Layout aus.
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! '
Kombinieren Sie Text vertikal oder horizontal. Verwenden Sie diesen Befehl im gum style
um Layouts und eine hübsche Ausgabe zu erstellen.
Tipp: Setzen Sie die Ausgabe des gum style
immer in Anführungszeichen, um Zeilenumbrüche ( n
) beizubehalten, wenn Sie ihn als Argument im join
-Befehl verwenden.
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
verarbeitet und formatiert Textkörper. gum format
kann Markdown, Vorlagenzeichenfolgen und benannte Emojis analysieren.
# 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
Weitere Informationen zu Vorlagenhilfsmitteln finden Sie in den Termenv-Dokumenten. Eine vollständige Liste der benannten Emojis finden Sie in der GitHub-API.
log
protokolliert Nachrichten an das Terminal auf verschiedenen Ebenen und mit unterschiedlichem Stil mithilfe der Bibliothek 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. "
Akzeptable --time
Formate finden Sie im Go time
Paket.
Weitere Informationen zur Verwendung finden Sie charmbracelet/log
.
So verwenden Sie gum
in Ihren täglichen Arbeitsabläufen:
Weitere Anwendungsfälle aus der Praxis finden Sie im Beispielverzeichnis.
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
Sitzung her SESSION= $( tmux list-sessions -F # S | gum filter --placeholder " Pick session... " )
tmux switch-client -t $SESSION || tmux attach -t $SESSION
git
-Verlauf aus git log --oneline | gum filter | cut -d ' ' -f1 # | copy
skate
Passwortauswahl. skate list -k | gum filter | xargs skate get
brew list | gum choose --no-limit | xargs brew uninstall
git
Zweige git branch | cut -c 3- | gum choose --no-limit | xargs git branch -D
gh
auschecken gh pr list | cut -f1,2 | gum choose | cut -f1 | xargs gh pr checkout
gum filter < $HISTFILE --height 20
sudo
Ersatz alias please= " gum input --password | sudo -nS "
Wir würden gerne Ihre Meinung zu diesem Projekt hören. Schreiben Sie uns gerne eine Nachricht!
MIT
Ein Teil von Charme.
Charm-Inhalte • Charm liebt Open Source