Skip to content

Release Notes

brush v0.2.18

🚀 Release Notes

Since our last release we've seen an influx of interest, thanks in part to getting posted to Hacker News and elsewhere. Welcome all! We appreciate your interest, questions, filed issues, and support 😄

This release focuses on a wave of fixes to address some of the user feedback we've received, as well as some targeted features that had been on our backlog for quite some time.
Some select highlights:

  • Ergonomic improvements to the brush-core exported API surface for applications embedding brush. (Particular thanks to @Elsie19 and other contributors on this).
  • Support for logical/physical options (-L, -P) to cd, pwd, et al. (This builds on the work that @39555 started several months back; thanks for your patience until we were able to get to it!)
  • Significant improvements to the mapfile/readarray builtin. (Thanks to @Elsie19 on overhauling mapfile's core input loop.)
  • Initial implementation of the ulimit builtin. (Thanks to @lu-zero for getting it from unimplemented to something reasonable.)
  • Initial implementation of bind -x support, used by many shell extensions and users' .bashrc files; there's more to do, but this covers a long asked-for feature request from the community.

There's plenty more bug fixes and changes -- as usual, the full details are below. And a big shout-out to our new contributors as well as contributors who dove in deeper this cycle! 🙏

🗒️ Details

  • fix: correct release tag check in cd pipeline by @reubeno in #443
  • feat(apply_unary_predicate_to_str): implement -R operand by @Elsie19 in #439
  • feat(Shell): add methods to add environmental variables and builtins by @Elsie19 in #447
  • ref(Shell): turn &Path parameters into AsRef by @Elsie19 in #448
  • build(deps): bump taiki-e/upload-rust-binary-action from 1.24.0 to 1.25.0 in the github-actions group by @dependabot in #450
  • fix(prompt): support PROMPT_COMMAND arrays by @reubeno in #451
  • fix(trap): handle '-' unregistration syntax by @reubeno in #452
  • test(extended-tests): explicitly set modified date on test files by @reubeno in #453
  • chore: upgrade dependencies: reedline, nix, clap, thiserror, etc. by @reubeno in #456
  • chore: enable (and fix) current checks across all workspace crates by @reubeno in #457
  • feat: implement {cd,pwd} -{L,P} by @reubeno in #458
  • build(deps): bump the cargo group with 3 updates by @dependabot in #461
  • build(deps): bump the github-actions group with 2 updates by @dependabot in #460
  • fix(complete): fixes + tests for "declare -r" by @reubeno in #462
  • fix: enable unnameable_types lint and mitigate errors by @reubeno in #459
  • fix(builtin): fix issues with 'builtin' invoking declaration builtins by @reubeno in #466
  • fix(declare): turn down volume on non-existent functions by @reubeno in #467
  • fix(expansion): allow negative subscripts with indexed arrays + slices by @reubeno in #468
  • chore: better log + connect unimpl functionality with GH issues by @reubeno in #476
  • chore: separate release and bench profiles by @reubeno in #477
  • test: add compat test for $_ (not yet passing) by @reubeno in #480
  • docs: update readme by @reubeno in #481
  • test: add known failing tests for reported issues by @reubeno in #483
  • feat(builtins): implement basic bind -x support by @reubeno in #478
  • fix: allow "bind" usage in .bashrc by @reubeno in #485
  • build(deps): bump the cargo group with 3 updates by @dependabot in #487
  • feat(mapfile): Register also as readarray by @lu-zero in #486
  • fix(expansion): fix issues parsing backquoted commands nested in single/double-quoted strings by @reubeno in #491
  • feat(funcs): implement function exporting/importing by @reubeno in #492
  • fix(break,continue): use default_value_t for flag values by @Elsie19 in #493
  • docs: add discord invite to readme by @reubeno in #494
  • chore(edit_mode): Fix clippy lints by @lu-zero in #495
  • fix(help): better compact argument help by @reubeno in #499
  • fix(input): map Ctrl+_ -> undo by @reubeno in #500
  • fix: fix typos + add spell-checking PR check by @reubeno in #501
  • feat(mapfile): implement -n, -d, -s by @Elsie19 in #490
  • Implement ulimit by @lu-zero in #482
  • docs(readme): a Fish as a shell implemented in Rust by @brettcannon in #505
  • chore: prepare release by @reubeno in #504
  • fix: add missing tokio feature to unblock release by @reubeno in #506
  • fix: suppress warning when building with --no-default-features by @reubeno in #508

New Contributors

Full Changelog: brush-shell-v0.2.17...brush-shell-v0.2.18

brush-parser-v0.2.16

chore: Release package brush-parser version 0.2.16

brush-interactive-v0.2.18

chore: Release package brush-interactive version 0.2.18

brush-core-v0.3.1

chore: Release package brush-core version 0.3.1

brush v0.2.17

Release Notes

This release brings:

  • Targeted ergonomics improvements for users of brush_core::Shell
  • Minor completion improvements for syntactically complex command-lines
  • Build and test support for -musl variants of brush
  • Early experimental build-only support for building for wasm32-unknown-unknown

And a big shout-out to our new contributors! Please keep reading for more details.

What's Changed

  • build(deps): bump the cargo group with 3 updates by @dependabot in #426
  • chore: get building for wasm32-unknown-unknown by @reubeno in #425
  • fix: honor COMP_WORDBREAKS in completion tokenization by @reubeno in #407
  • build(deps): bump the cargo group with 2 updates by @dependabot in #427
  • ci: build musl variant + reenable aarch64 tests by @reubeno in #428
  • build(deps): bump rand from 0.9.0 to 0.9.1 in the cargo group by @dependabot in #431
  • test: implement --skip in brush-compat-tests harness by @reubeno in #432
  • docs: Add instructions for installing from the AUR by @orhun in #433
  • fix: handle complete builtin run without options by @reubeno in #435
  • chore(Shell): use relaxed typing for string input by @Elsie19 in #437
  • feat(Shell): add get_env_var method for more generic variable returns by @Elsie19 in #438
  • build: add workflow for publishing release binaries to GH by @reubeno in #440
  • chore: prepare release by @reubeno in #441

New Contributors

Full Changelog: brush-shell-v0.2.16...brush-shell-v0.2.17

brush-parser-v0.2.15

chore: Release package brush-parser version 0.2.15

brush-interactive-v0.2.17

chore: Release package brush-interactive version 0.2.17

brush-core-v0.3.0

chore: Release package brush-core version 0.3.0

brush v0.2.16

Release Notes

This release brings an assortment of fixes for reported compatibility issues and an upgrade of reedline to 0.39.0. Most notably:

  • exec now supports being used commandlessly, to update open file descriptors in the running shell
  • arithmetic expressions support base#literal syntax for integer literals
  • $PS4 is prompt-expanded when used in set -x et al.
  • command -p is now implemented
  • targeted fixes to support running our compatibility test suite in more environments (e.g., NixOS)

Keep reading for more details.

What's Changed

  • fix(builtins): implement command-less exec semantics with open fds by @reubeno in #384
  • fix(builtins): correct read handling of IFS/space by @reubeno in #385
  • fix(extglob): correct handling of extglobs with empty branches by @reubeno in #386
  • feat(arithmetic): support explicit base#literal in arithmetic by @reubeno in #388
  • docs: add how to use via nixpkgs by @kachick in #387
  • build(deps): bump the cargo group with 2 updates by @dependabot in #389
  • fix: default PS1 and PS2 in interactive mode by @reubeno in #390
  • fix: correct path tests on empty strings by @reubeno in #391
  • fix: reset default prompt color by @reubeno in #392
  • build(deps): bump the cargo group with 2 updates by @dependabot in #393
  • Expand contents of PS4 when tracing by @dan4thewin in #396
  • docs: fill out TBD sections in CONTRIBUTING.md + add extension suggestions by @reubeno in #397
  • chore: upgrade cached crate by @reubeno in #398
  • docs: add lines-of-code badge to readme by @reubeno in #399
  • docs: symlink licenses under crate dirs by @reubeno in #400
  • build(deps): bump serde from 1.0.218 to 1.0.219 in the cargo group by @dependabot in #401
  • chore: rewrite dir diffing test code to minimize deps by @reubeno in #403
  • feat: implement command -p by @reubeno and @39555 in #402
  • fix: allow newline in empty array assignment by @idealseal in #405
  • fix: improve panic handling output by @reubeno in #409
  • build(deps): bump the cargo group with 2 updates by @dependabot in #410
  • test: add more linux distros to test matrix by @reubeno in #412
  • ci: bump bash-completion tests to 2.16.0 by @reubeno in #414
  • test: enable testing on nixos/nix container image by @reubeno in #413
  • chore: upgrade reedline + other deps by @reubeno in #415
  • fix(regex): enable multiline mode for extended test regexes by @reubeno in #416
  • fix: parse '#' as char only if inside a variable expansion by @idealseal in #418
  • build(deps): bump whoami from 1.5.2 to 1.6.0 in the cargo group by @dependabot in #423
  • chore: prepare release by @reubeno in #424

New Contributors

Full Changelog: brush-shell-v0.2.15...brush-shell-v0.2.16

brush-parser-v0.2.14

chore: Release package brush-parser version 0.2.14