Skip to content

v0.15.0

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 13 Jan 19:11
· 2 commits to main since this release

No longer a sticky situation

This release contains a small boatload of fixes and quality-of-life features across the board by the great @caarlos0 and some awesome contributors.

Most importantly we detangled Gum and Huh. The two libraries were too tightly coupled creating a difficult environment to maintain. With this separation, Gum much easier to maintain, especially for contributors. Chew on that!

General Stuff

No more weird ANSI: gum now strips ANSI sequences by default. Want β€˜em back? just add --no-strip-ansi.

We fixed some bugs with existing timeouts + they can now be used in confirm, choose, file, filter, input, pager, and spin. You can specify the units, i.e. --timeout=750ms, --timeout=1m30s

Choose

Sometimes you want the user-facing choice to be different than the outputted value. Now you can do that with --label-delimiter:

$ printf 'Pocky:0\nRamen:1\nShrimp Chips:2\n' | gum choose --label-delimiter=':'

Want to select all options by default? Use --select='*'.

$ printf 'Pocky\nRamen\nShrimp Chips\n' | gum choose  --select='*'

Confirm

No you can print the chosen value with --show-output:

$ gum confirm --show-output 'Do you agree?'
Do you agree? No
exit status 1

File

You can now add a header to your filepickers with the --header set of flags.

gum file --header="Whatcha gonna pick?"

file

For details see gum file --help.

Filter

Better delimiters, select all, and so on

Press ctrl+a to select all choices, esc to unfocus the filter field.

Want some defaults? Use --selected to preselect choices. You can also use --input-delimiter and --output-delimiter for more flexibility around input and output.

$ echo "JS|Android|iOS" | gum filter --selected='*' --input-delimiter="|" --no-limit --output-delimiter=","

Freeform input

Filter's --no-strict allows you to create a new option if no matches are found; it's essentially a free input field. Go crazy!

Sort: we fixed it

Filter's --sort would sort by score which was causing some confusion for users. To clarify this behaviour, --sort is deprecated in favour of --[no]-fuzzy-sort.

Want to sort alphabetically? Leverage the sort command in a pipeline:

$ cat input.txt | sort | gum filter --no-sort

Log

Now you can set a minimum log level with GUM_LOG_LEVEL. Valid values are debug, info, warn, error, and fatal.

Spin

You can now use --show-stdout and --show-stderr to print output:

$ gum spin --show-stdout --title "Running command..." -- sleep 10 && echo hello

Table

We expanded the table API to allow users to control more fields in csv.Reader through gum. This includes --lazy-quotes and --fields-per-record. This should fix issues with gum struggling to read CSV files properly. For details see gum table --help.

We also made a bunch of rendering improvements such as growing the table rows based on --columns, settings sane defaults widths, ignoring BOMs (byte order marks), and so on.

Changelog

New!

  • feat(choose): --selected="*" to select all by @caarlos0 in #769
  • feat(choose,filter): --input-delimiter --output-delimiter by @caarlos0 in #779
  • feat(confirm): add --show-output by @vahnrr in #427
  • feat(file): add --header by @caarlos0 in #768
  • feat(file): show permissions and size by @caarlos0 in #717
  • feat(filter): --select-if-one returns if single match by @caarlos0 in #778
  • feat(filter): allow to focus out of filter by @caarlos0 in #776
  • feat(filter): allow to pre-select items with --selected by @caarlos0 in #777
  • feat(filter): ctrl+a to toggle select all by @caarlos0 in #770
  • feat(log): support setting minimum log level with GUM_LOG_LEVEL by @caarlos0 in #723
  • feat(spin): --show-stdout --show-stderr by @caarlos0 in #774
  • feat(style): trim line spaces by @caarlos0 in #767
  • feat(table): --lazy-quotes and --fields-per-record by @caarlos0 in #759
  • feat(table): add help by @caarlos0 in #756
  • feat(table): set --print if stdout is not a terminal by @caarlos0 in #762
  • feat(version): adds command to check current gum version by @caarlos0 in #775
  • feat: adding return column to table command by @deicon in #415
  • feat: allow cursor option in file by @radar07 in #667
  • feat: esc exit 1, ctrl+c exit 130, help arrow order by @caarlos0 in #771
  • feat: handle focus/blur events by @caarlos0 in #749
  • feat: improve handling ctrl+c and timeouts by @caarlos0 in #747

Fixed

Other Stuff

New Contributors

Full Changelog: v0.14.5...v0.15.0


Verifying the artifacts

First, download the checksums.txt file, for example, with wget:

wget 'https://github.com/charmbracelet/gum/releases/download/v0.15.0/checksums.txt'

Then, verify it using cosign:

cosign verify-blob \
  --certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  --cert 'https://github.com/charmbracelet/gum/releases/download/v0.15.0/checksums.txt.pem' \
  --signature 'https://github.com/charmbracelet/gum/releases/download/v0.15.0/checksums.txt.sig' \
  ./checksums.txt

If the output is Verified OK, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum:

sha256sum --ignore-missing -c checksums.txt

Done! You artifacts are now verified!

The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.