rust-lang / rust-lang/rustup

Make the interaction between `MultiProgress` and other lines below it more robust

Open
#4,737 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-concurrency enhancement incomplete
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.