Skip to content

v0.26.3

Compare
Choose a tag to compare
@orhun orhun released this 20 May 12:24
· 218 commits to main since this release
fadc73d

0.26.3 - 2024-05-19

We are happy to announce a brand new Ratatui Forum 🐭 for Rust & TUI enthusiasts.

This is a patch release that fixes the unicode truncation bug, adds performance and quality of life improvements.

Release highlights: https://ratatui.rs/highlights/v0263/

Features

  • 97ee102 (buffer) Track_caller for index_of by @EdJoPaTo in #1046
    **

    The caller put in the wrong x/y -> the caller is the cause.
    
  • bf09234 (table) Make TableState::new const by @EdJoPaTo in #1040

  • eb281df (uncategorized) Use inner Display implementation by @EdJoPaTo in #1097

  • ec763af (uncategorized) Make Stylize's .bg(color) generic by @kdheepak in #1099

    This PR makes `.bg(color)` generic accepting anything that can be
    converted into `Color`; similar to the `.fg(color)` method on the same
    trait
    
  • 4d1784f (uncategorized) Re-export ParseColorError as style::ParseColorError by @joshka in #1086

    Fixes:#1085

Bug Fixes

  • 366cbae (buffer) Fix Debug panic and fix formatting of overridden parts by @EdJoPaTo in #1098

    Fix panic in `Debug for Buffer` when `width == 0`.
    Also corrects the output when symbols are overridden.
    
  • 4392759 (examples) Changed user_input example to work with multi-byte unicode chars by @OkieOth in #1069

    This is the proposed solution for issue #1068. It solves the bug in the
    user_input example with multi-byte UTF-8 characters as input.
    

    Fixes:#1068


  • 20fc0dd (examples) Fix key handling in constraints by @psobolik in #1066

    Add check for `KeyEventKind::Press` to constraints example's event
    handler to eliminate double keys
    on Windows.
    

    Fixes:#1062


  • f4637d4 (reflow) Allow wrapping at zero width whitespace by @kxxt in #1074

  • 699c2d7 (uncategorized) Unicode truncation bug by @joshka in #1089

    - Rewrote the line / span rendering code to take into account how
    multi-byte / wide emoji characters are truncated when rendering into
    areas that cannot accommodate them in the available space
    - Added comprehensive coverage over the edge cases
    - Adds a benchmark to ensure perf
    

    Fixes:#1032

  • b30411d (uncategorized) Termwiz underline color test by @joshka in #1094

    Fixes code that doesn't compile in the termwiz tests when
    underline-color feature is enabled.
    
  • 5f1e119 (uncategorized) Correct feature flag typo for termwiz by @joshka in #1088

    underline-color was incorrectly spelt as underline_color
    
  • 0a16496 (uncategorized) Use to_string to serialize Color by @SleepySwords in #934

    Since deserialize now uses `FromStr` to deserialize color, serializing
    `Color` RGB values, as well as index values, would produce an output
    that would no longer be able to be deserialized without causing an
    error.
    

    Color::Rgb will now be serialized as the hex representation of their
    value.
    For example, with serde_json, Color::Rgb(255, 0, 255) would be
    serialized as "#FF00FF" rather than {"Rgb": [255, 0, 255]}.

    Color::Indexed will now be serialized as just the string of the index.
    For example, with serde_json, Color::Indexed(10) would be serialized
    as "10" rather than {"Indexed": 10}.

Other color variants remain the same.

Refactor

  • 2cfe82a (buffer) Deprecate assert_buffer_eq! in favor of assert_eq! by @EdJoPaTo in #1007

    - Simplify `assert_buffer_eq!` logic.
    - Deprecate `assert_buffer_eq!`.
    - Introduce `TestBackend::assert_buffer_lines`.
    
    Also simplify many tests involving buffer comparisons.
    
    For the deprecation, just use `assert_eq` instead of `assert_buffer_eq`:
    
    ```diff
    -assert_buffer_eq!(actual, expected);
     assert_eq!(actual, expected);
    ```
    
    ---
    
    I noticed `assert_buffer_eq!` creating no test coverage reports and
    looked into this macro. First I simplified it. Then I noticed a bunch of
    `assert_eq!(buffer, …)` and other indirect usages of this macro (like
    `TestBackend::assert_buffer`).
    
    The good thing here is that it's mainly used in tests so not many
    changes to the library code.
    
  • baedc39 (buffer) Simplify set_stringn logic by @EdJoPaTo in #1083

  • 9bd89c2 (clippy) Enable breaking lint checks by @EdJoPaTo in #988

    We need to make sure to not change existing methods without a notice.
    But at the same time this also finds public additions with mistakes
    before they are even released which is what I would like to have.
    
    This renames a method and deprecated the old name hinting to a new name.
    Should this be mentioned somewhere, so it's added to the release notes?
    It's not breaking because the old method is still there.
    
  • bef5bcf (example) Remove pointless new method by @EdJoPaTo in #1038

    Use `App::default()` directly.
    
  • f3172c5 (gauge) Fix internal typo by @EdJoPaTo in #1048

Documentation

  • da1ade7 (github) Update code owners about past maintainers by @orhun in #1073

    As per suggestion in
    https://github.com/ratatui-org/ratatui/pull/1067#issuecomment-2079766990
    
    It's good for historical purposes!
    
  • 3687f78 (github) Update code owners by @orhun in #1067

    Removes the team members that are not able to review PRs recently (with
    their approval ofc)
    
  • 839cca2 (table) Fix typo in docs for highlight_symbol by @kdheepak in #1108

  • f945a0b (test) Fix typo in TestBackend documentation by @orhun in #1107

  • 828d17a (uncategorized) Add minimal example by @joshka in #1114

  • e95230b (uncategorized) Add note about scrollbar state content length by @Utagai in #1077

Performance

  • 366c2a0 (block) Use Block::bordered by @EdJoPaTo in #1041

    Block::bordered() is shorter than

    Block::new().borders(Borders::ALL), requires one less import
    (Borders) and in case Block::default() was used before can even be
    const.

  • 2e71c18 (buffer) Simplify Buffer::filled with macro by @EdJoPaTo in #1036

    The `vec![]` macro is highly optimized by the Rust team and shorter.
    Don't do it manually.
    
    This change is mainly cleaner code. The only production code that uses
    this is `Terminal::with_options` and `Terminal::insert_before` so it's
    not performance relevant on every render.
    
  • 81b9633 (calendar) Use const fn by @EdJoPaTo in #1039

    Also, do the comparison without `as u8`. Stays the same at runtime and
    is cleaner code.
    
  • c442dfd (canvas) Change map data to const instead of static by @EdJoPaTo in #1037

  • 1706b0a (crossterm) Speed up combined fg and bg color changes by up to 20% by @joshka in #1072

  • 1a4bb1c (layout) Avoid allocating memory when using split ergonomic utils by @tranzystorekk in #1105

    Don't create intermediate vec in `Layout::areas` and
    `Layout::spacers` when there's no need for one.
    

Styling

  • aa4260f (uncategorized) Use std::fmt instead of importing Debug and Display by @joshka in #1087

    This is a small universal style change to avoid making this change a
    part of other PRs.
    
    [rationale](https://github.com/ratatui-org/ratatui/pull/1083#discussion_r1588466060)
    

Testing

Miscellaneous Tasks

  • 5fbb77a (readme) Use terminal theme for badges by @TadoTheMiner in #1026

    The badges in the readme were all the default theme. Giving them
    prettier colors that match the terminal gif is better. I've used the
    colors from the VHS repo.
    
  • bef2bc1 (cargo) Add homepage to Cargo.toml by @joshka in #1080

  • 76e5fe5 (uncategorized) Revert "Make Stylize's .bg(color) generic" by @kdheepak in #1102

    This reverts commit ec763af8512df731799c8f30c38c37252068a4c4 from #1099
    
  • 64eb391 (uncategorized) Fixup cargo lint for windows targets by @joshka in #1071

    Crossterm brings in multiple versions of the same dep
    
  • 326a461 (uncategorized) Add package categories field by @mcskware in #1035

    Add the package categories field in Cargo.toml, with value
    `["command-line-interface"]`. This fixes the (currently non-default)
    clippy cargo group lint
    [`clippy::cargo_common_metadata`](https://rust-lang.github.io/rust-clippy/master/index.html#/cargo_common_metadata).
    
    As per discussion in [Cargo package categories
    suggestions](https://github.com/ratatui-org/ratatui/discussions/1034),
    this lint is not suggested to be run by default in CI, but rather as an
    occasional one-off as part of the larger
    [`clippy::cargo`](https://doc.rust-lang.org/stable/clippy/lints.html#cargo)
    lint group.
    

Build

  • 4955380 (uncategorized) Remove pre-push hooks by @joshka in #1115

  • 28e81c0 (uncategorized) Add underline-color to all features flag in makefile by @joshka in #1100

  • c75aa19 (uncategorized) Add clippy::cargo lint by @joshka in #1053

    Followup to https://github.com/ratatui-org/ratatui/pull/1035 and
    https://github.com/ratatui-org/ratatui/discussions/1034
    
    It's reasonable to enable this and deal with breakage by fixing any
    specific issues that arise.
    

New Contributors

Full Changelog: v0.26.2...v0.26.3