v0.26.3
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 #1099This 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 #934Since 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.
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 thanBlock::new().borders(Borders::ALL)
, requires one less import
(Borders
) and in caseBlock::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 #1102This 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
- @Utagai made their first contribution in #1077
- @kxxt made their first contribution in #1074
- @OkieOth made their first contribution in #1069
- @psobolik made their first contribution in #1066
- @SleepySwords made their first contribution in #934
- @mcskware made their first contribution in #1035
Full Changelog: v0.26.2...v0.26.3