gum: سكربتات شيل فخمة بـ choose و confirm و spin
gum من Charm — أدوات choose و input و filter و confirm و spin لسكربتات شيل تفاعلية فخمة من غير ما تكتب Go. MIT · v2.0.2 · مش archived.
بتكتب سكربت شيل وعايز تسأل المستخدم سؤال، تخلّيه يختار من لستة، أو يأكّد قبل rm… فبتلجأ لـ read، أو select، أو dialog/whiptail، والنتيجة إمّا باهتة أو تقيلة. gum من charmbracelet اتعمل عشان الحالة دي: أدوات جاهزة وقابلة للتخصيص، تبني بيها سكربتات وaliases تفاعلية من غير ما تكتب سطر Go واحد.
أحدث إصدار وقت كتابة المقال: v2.0.2 (نُشر 24 سبتمبر 2026) — ترخيص MIT، والمشروع مش archived على GitHub (~24.5k★ وقت التحقق). الشعار الرسمي: A tool for glamorous shell scripts.
ليه gum؟
حسب الـ README، gum بيستغل قوة Bubbles و Lip Gloss جوه أوامرك وaliases — يعني واجهات طرفية حلوة من غير ما تبني TUI بنفسك. فيه أوامر زي: choose، confirm، file، filter، input، write، spin، style، table، pager، log، وغيرهم.
مثال عملي: Conventional Commits
التيوتوريال الرسمي بيبني سكربت commits بخطوات واضحة:
gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore" "revert"
بعدين scope:
gum input --placeholder "scope"
ثم الملخص والتفاصيل:
gum input --value "$TYPE$SCOPE: " --placeholder "Summary of this change"
gum write --placeholder "Details of this change"
وأخيرًا التأكيد قبل الـ commit:
gum confirm "Commit changes?" && git commit -m "$SUMMARY" -m "$DESCRIPTION"
gum confirm بيخرج بـ exit code 0 (نعم) أو 1 (لا) — فينفع جوّه && / || مباشرة.
أوامر بتستخدمها كل يوم
Filter — fuzzy matching على لستة:
gum filter < flavors.txt > selection.txt
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit
Input / Write — سطر واحد أو نص طويل (ctrl+d لإنهاء الـ write):
gum input > answer.txt
gum write > story.txt
Spin — سبينر أثناء تشغيل أمر:
gum spin --spinner dot --title "Buying Bubble Gum..." -- sleep 5
Style — تنسيق نص بحدود وألوان في سطر واحد (من الـ README).
تثبيت سريع
من الوثائق: brew install gum على macOS/Linux، وكمان pacman / dnf / nix / winget / scoop، وحزم من repo.charm.sh، أو:
go install charm.land/gum/v2@latest
(من v2 اسم الحزمة بقى charm.land/gum/v2.)
رأيي
read وselect لسه كويسين للسكربتات البسيطة. بس لو السكربت هيستخدمه ناس تانية — أو إنت بعد شهر — gum بيدي UX أوضح بكتير: اختيار، فلترة، تأكيد، سبينر، وتنسيق. حطّه في الـ PATH جنب fd وeza وbat، وابدأ بسكربت commit أو deploy فيه gum confirm قبل أي أمر مدمّر.
أسبوع معرض القاهرة للتكنولوجيا — لو رايح، قولنا هتحضر إيه؟ ولو عندك سكربت لسه على read، قولنا هتحوّله لـ gum بإيه أولًا 👇
المصادر
- GitHub — charmbracelet/gum: https://github.com/charmbracelet/gum
- Releases — v2.0.2: https://github.com/charmbracelet/gum/releases/tag/v2.0.2
- README (أوامر وأمثلة): https://github.com/charmbracelet/gum#readme
- gum
- CLI
- shell
- Charm
- DevTools
- OpenSource