gum - 華やかなシェルスクリプトのツール 🎀

(A tool for glamorous shell scripts 🎀)

Created at: 2022-06-11 06:09:42
Language: Go
License: MIT

ガム

ガム画像

最新のリリース ドキュメントに行く ビルド ステータス

魅力的なシェル スクリプト用のツール。Go コードを書くことなく、スクリプトとエイリアスでBubblesLip Glossのパワーを活用 してください!

./demo.sh スクリプトを実行するシェル

上記の例は、単一のシェル スクリプト ( source ) から実行されています。

チュートリアル

Gum は、高度に構成可能ですぐに使用できるユーティリティを提供し、わずか数行のコードで便利なシェル スクリプトとドットファイル エイリアスを作成するのに役立ちます。

ドットファイルの従来のコミットを書くのに役立つ簡単なスクリプトを作成しましょう。

から始め

#!/bin/sh
ます。

#!/bin/sh

次のコマンドでコミット タイプを尋ね

gum choose
ます。

gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore" "revert"

ヒント: このコマンド自体

stdout
は、あまり役に立ちません。後でコマンドを利用するには、stdout を
$VARIABLE
または に保存できます
file.txt

コミットの (オプションの) スコープを要求します。

gum input --placeholder "scope"

コミット メッセージのプロンプト:

gum input --placeholder "Summary of this change"

変更の詳細な (複数行の) 説明を求めます。

gum write --placeholder "Details of this change"

コミットする前に確認を求める:

gum confirm
0
確認された場合はステータス
1
、キャンセルされた場合はステータスで終了します。

gum confirm "Commit changes?" && git commit -m "$SUMMARY" -m "$DESCRIPTION"

すべてを一緒に入れて...

#!/bin/sh
TYPE=$(gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore" "revert")
SCOPE=$(gum input --placeholder "scope")

# Since the scope is optional, wrap it in parentheses if it has a value.
test -n "$SCOPE" && SCOPE="($SCOPE)"

# Pre-populate the input with the type(scope): so that the user may change it
SUMMARY=$(gum input --value "$TYPE$SCOPE: " --placeholder "Summary of this change")
DESCRIPTION=$(gum write --placeholder "Details of this change")

# Commit these changes
gum confirm "Commit changes?" && git commit -m "$SUMMARY" -m "$DESCRIPTION"

./examples/commit.sh スクリプトを実行して git にコミットする

インストール

パッケージ マネージャーを使用します。

# macOS or Linux
brew install gum

# Arch Linux (btw)
yay -S gum-bin

# Nix
nix-env -iA nixpkgs.gum

# Debian/Ubuntu
echo 'deb [trusted=yes] https://repo.charm.sh/apt/ /' | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install gum

# Fedora
echo '[charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=0' | sudo tee /etc/yum.repos.d/charm.repo
sudo yum install gum

またはダウンロードします。

  • パッケージは Debian および RPM 形式で利用可能
  • バイナリは、Linux、macOS、および Windows で利用できます

または、次のようにインストールし

go
ます。

go install github.com/charmbracelet/gum@latest

カスタマイズ

gum
スクリプトに埋め込むように設計されており、あらゆる種類のユースケースをサポートしています。コンポーネントは、テーマやユースケースに合わせて構成およびカスタマイズできます。

でカスタマイズでき

--flags
ます。
gum <command> --help
各コマンドのカスタマイズおよび構成オプションの完全なビューについては、を参照してください。

たとえば、 を使用して

input
、カーソルの色、プロンプトの色、プロンプト インジケーター、プレースホルダー テキスト、幅を変更し、値を事前入力してみましょう。

gum input --cursor.foreground "#FF0" --prompt.foreground "#0FF" --prompt "* " \
    --placeholder "What's up?" --width 80 --value "Not much, hby?"

ほとんどのカスタマイズオプションを表示するガム入力

交流

入力

簡単なコマンドで入力を求めます。

gum input > answer.text

シェル ランニング ガム入力の入力はあまりありませんか?

書く

複数行のテキストを要求します。

gum write > story.text

シェル ランニング ガム 書き込み タイピング ストーリー

フィルター

あいまい一致を使用して、値のリストをフィルタリングします。

echo Strawberry >> flavors.text
echo Banana >> flavors.text
echo Cherry >> flavors.text
cat flavors.text | gum filter > selection.text

さまざまなバブルガムのフレーバーのシェル ランニング ガム フィルター

選ぶ

選択肢のリストからオプションを選択します。

echo "Pick a card, any card..."
CARD=$(gum choose --height 15 {{A,K,Q,J},{10..2}}" "{♠,♥,♣,♦})
echo "Was your card the $CARD?"

フラグを使用して複数のアイテムを選択することもできます

--limit
。これにより、選択できるアイテムの最大数が決まります。

echo "Pick your top 5 songs."
cat songs.txt | gum choose --limit 5

または、

--no-limit
フラグを使用して任意の数の選択を許可します。

echo "What do you need from the grocery store?"
cat foods.txt | gum choose --no-limit

数字とガムフレーバーで選べるシェルランニングガム

確認

アクションを実行するかどうかを確認します。 選択に応じてコード

0
(肯定) または(否定) で終了します。
1

gum confirm && rm file.txt || echo "File not removed"

シェルランニングガム確認

スピン

スクリプトまたはコマンドの実行中にスピナーを表示します。指定されたコマンドが終了すると、スピナーは自動的に停止します。

gum spin --spinner dot --title "Buying Bubble Gum..." -- sleep 5

5秒間寝ている間にシェルランニングガムスピン

使用可能なスピナー タイプには

line
dot
minidot
jump
pulse
points
globe
moon
monkey
meter
があり
hamburger
ます。

スタイリング

スタイル

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"

I LOVE Bubble Gum は 4 つのボックスに書かれており、周囲に二重の枠線が引かれています。

フォーマット

format
テキストの本文を処理してフォーマットします。
gum format
マークダウン、テンプレート文字列、名前付き絵文字を解析できます。

# Format some markdown
gum format -- "# Gum Formats" "- Markdown" "- Code" "- Template" "- Emoji"
echo "# Gum Formats\n- Markdown\n- Code\n- Template\n- 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 docsを参照してください。名前付き絵文字の完全なリストについては、GitHub APIを参照してください。

さまざまなタイプのフォーマット用のランニングガムフォーマット

実際の使用例については、 examplesディレクトリを参照してください。

gum
日常のワークフローでの使用方法:

コミットメッセージを書く

と を使用して、短い要約と詳細を含む git コミット メッセージを書き込むための入力を求め

gum input
ます
gum write

ボーナス ポイント:コミット メッセージのプレフィックスとして、 Conventional Commits Specification

gum filter
と共に使用します。

git commit -m "$(gum input --width 50 --placeholder "Summary of changes")" \
           -m "$(gum write --width 80 --placeholder "Details of changes")"

でファイルを開く
$EDITOR

デフォルトで

gum filter
は、現在のディレクトリから(再帰的に検索された)すべてのファイルのリストが表示され、適切な無視設定がいくつかあります(
.git
node_modules
)。このコマンドを使用すると、ファイルを簡単に選択して .xml で開くことができます
$EDITOR

$EDITOR $(gum filter)

TMUX セッションに接続する

実行中の

tmux
セッションから選択してアタッチします。または、既にセッションに参加している場合は、
tmux
セッションを切り替えます。

SESSION=$(tmux list-sessions -F \#S | gum filter --placeholder "Pick session...")
tmux switch-client -t $SESSION || tmux attach -t $SESSION

ガム フィルターを使用した tmux セッションの選択

Git 履歴からコミット ハッシュを選択する

git 履歴をフィルター処理してコミット メッセージを検索し、選択したコミットのコミット ハッシュをコピーします。

git log --oneline | gum filter | cut -d' ' -f1 # | copy

ガムフィルターでコミットを選ぶ

アンインストールするパッケージを選択

パッケージ マネージャー (ここでは を使用します

brew
) によってインストールされたすべてのパッケージを一覧表示し、アンインストールするパッケージを選択します。

brew list | gum choose --no-limit | xargs brew uninstall

削除するブランチを選択

すべてのブランチを一覧表示し、削除するブランチを選択します。

git branch | cut -c 3- | gum choose --no-limit | xargs git branch -D

チェックアウトするプルリクエストを選択

現在の GitHub リポジトリのすべての PR を一覧表示し、選択した PR をチェックアウトします ( を使用

gh
)。

gh pr list | gum choose | cut -f1 | xargs gh pr checkout

フィードバック

このプロジェクトについてのご意見をお待ちしております。お気軽にご連絡ください。

ライセンス

MIT


チャームの一部。

チャームのロゴ

チャームのオープンソース • チャームはオープンソースが大好き