Fix multiline exec command rendering (#2023)

With Ratatui, if a single line contains newlines, it increments y but
not x so each subsequent line continued from the same x position as the
previous line ended on.

Before
<img width="2010" height="376" alt="CleanShot 2025-08-08 at 09 13 13"
src="https://github.com/user-attachments/assets/09feefbd-c5ee-4631-8967-93ab108c352a"
/>
After
<img width="1002" height="364" alt="CleanShot 2025-08-08 at 09 11 54"
src="https://github.com/user-attachments/assets/a58b47cf-777f-436a-93d9-ab277046a577"
/>
This commit is contained in:
Gabriel Peal
2025-08-08 10:52:24 -07:00
committed by GitHub
parent 307d9957fa
commit c3a8ab8511

View File

@@ -264,14 +264,21 @@ impl HistoryCell {
pub(crate) fn new_active_exec_command(command: Vec<String>) -> Self {
let command_escaped = strip_bash_lc_and_escape(&command);
let lines: Vec<Line<'static>> = vec![
Line::from(vec![
let mut lines: Vec<Line<'static>> = Vec::new();
let mut iter = command_escaped.lines();
if let Some(first) = iter.next() {
lines.push(Line::from(vec![
"".cyan(),
"Running command ".magenta(),
command_escaped.into(),
]),
Line::from(""),
];
first.to_string().into(),
]));
} else {
lines.push(Line::from(vec!["".cyan(), "Running command".magenta()]));
}
for cont in iter {
lines.push(Line::from(cont.to_string()));
}
lines.push(Line::from(""));
HistoryCell::ActiveExecCommand {
view: TextBlock::new(lines),
@@ -287,10 +294,18 @@ impl HistoryCell {
let mut lines: Vec<Line<'static>> = Vec::new();
let command_escaped = strip_bash_lc_and_escape(&command);
lines.push(Line::from(vec![
"⚡ Ran command ".magenta(),
command_escaped.into(),
]));
let mut cmd_lines = command_escaped.lines();
if let Some(first) = cmd_lines.next() {
lines.push(Line::from(vec![
"⚡ Ran command ".magenta(),
first.to_string().into(),
]));
} else {
lines.push(Line::from("⚡ Ran command".magenta()));
}
for cont in cmd_lines {
lines.push(Line::from(cont.to_string()));
}
let src = if exit_code == 0 { stdout } else { stderr };