Make the interaction between `MultiProgress` and other lines below it more robust
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 1.1k
- Avg merge
- 22h 40m
- Merged PRs (30d)
- 46
Description
Follow up of https://github.com/rust-lang/rustup/issues/4560.
Now we know that the last line of MultiProgress lacks a newline, and instead it adds a bunch of whitespaces so that new contents are forced to be shown on the following line.
/ # RUSTUP_TERM_PROGRESS_WHEN=always rustup check^[[J^M$ ^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m|^[[0m ^M^[[2K^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m/^[[0m ^M^[[2K^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m/^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m|^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m/^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m/^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m/^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m-^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m-^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m-^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m-^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m\^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m\^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m\^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m\^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m|^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m|^[[0m^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m|^[[0m ^[[1A^M^[[2K^[[1B^M^[[2K^[[1A^[[1mstable-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[92mup to date^[[0m: 1.93.1 (01f6ddf75 2026-02-11)^M$ ^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[96mChecking...^[[0m ^[[1m^[[96m|^[[0m ^M^[[2K^[[1mbeta-x86_64-unknown-linux-musl - ^[[0m^[[1m^[[92mup to date^[[0m: 1.94.0-beta.5 (31a40f5c8 2026-02-20) ^[[1mrustup - ^[[0m^[[1m^[[33mUpdate available^[[0m : 1.29.0 -> 1.28.2^M$ / #
https://github.com/rust-lang/rustup/issues/4560#issuecomment-3971844881
Clearly some terminal configurations are not very happy about this.
On the one hand, when the history is re-read under a different window width, the missing newline will be revealed easily.
On the other hand, in certain configs (which ones?) the line wrap is not visible at all, e.g. @epage's setup which is comprised of bash v5.3.9(1)-release inside of Zellij inside of Wezterm, running on Linux Desktop (but I wasn't able to reproduce on macOS, any DE/OS info?).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing RUSTUP_TERM_PROGRESS_WHEN=always rustup check with MultiProgress, focusing on the final line and subsequent shell output. Compare behavior across window widths and the Bash-in-Zellij-in-WezTerm setup described, then verify that progress output and following lines remain correctly separated without exposing terminal artifacts.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100