Show placeholder for commands with no output (#4509)
## Summary - show a dim “(no output)” placeholder when an executed command produces no stdout or stderr so empty runs are visible - update TUI snapshots to include the new placeholder in history renderings ## Testing - cargo test -p codex-tui ------ https://chatgpt.com/codex/tasks/task_i_68dc056c1d5883218fe8d9929e9b1657
This commit is contained in:
@@ -3,3 +3,4 @@ source: tui/src/chatwidget/tests.rs
|
|||||||
expression: exec_blob
|
expression: exec_blob
|
||||||
---
|
---
|
||||||
• Ran sleep 1
|
• Ran sleep 1
|
||||||
|
└ (no output)
|
||||||
|
|||||||
@@ -366,26 +366,35 @@ impl ExecCell {
|
|||||||
include_prefix: false,
|
include_prefix: false,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
let trimmed_output =
|
|
||||||
Self::truncate_lines_middle(&raw_output_lines, layout.output_max_lines);
|
|
||||||
|
|
||||||
let mut wrapped_output: Vec<Line<'static>> = Vec::new();
|
if raw_output_lines.is_empty() {
|
||||||
let output_wrap_width = layout.output_block.wrap_width(width);
|
|
||||||
let output_opts =
|
|
||||||
RtOptions::new(output_wrap_width).word_splitter(WordSplitter::NoHyphenation);
|
|
||||||
for line in trimmed_output {
|
|
||||||
push_owned_lines(
|
|
||||||
&word_wrap_line(&line, output_opts.clone()),
|
|
||||||
&mut wrapped_output,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if !wrapped_output.is_empty() {
|
|
||||||
lines.extend(prefix_lines(
|
lines.extend(prefix_lines(
|
||||||
wrapped_output,
|
vec![Line::from("(no output)".dim())],
|
||||||
Span::from(layout.output_block.initial_prefix).dim(),
|
Span::from(layout.output_block.initial_prefix).dim(),
|
||||||
Span::from(layout.output_block.subsequent_prefix),
|
Span::from(layout.output_block.subsequent_prefix),
|
||||||
));
|
));
|
||||||
|
} else {
|
||||||
|
let trimmed_output =
|
||||||
|
Self::truncate_lines_middle(&raw_output_lines, layout.output_max_lines);
|
||||||
|
|
||||||
|
let mut wrapped_output: Vec<Line<'static>> = Vec::new();
|
||||||
|
let output_wrap_width = layout.output_block.wrap_width(width);
|
||||||
|
let output_opts =
|
||||||
|
RtOptions::new(output_wrap_width).word_splitter(WordSplitter::NoHyphenation);
|
||||||
|
for line in trimmed_output {
|
||||||
|
push_owned_lines(
|
||||||
|
&word_wrap_line(&line, output_opts.clone()),
|
||||||
|
&mut wrapped_output,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if !wrapped_output.is_empty() {
|
||||||
|
lines.extend(prefix_lines(
|
||||||
|
wrapped_output,
|
||||||
|
Span::from(layout.output_block.initial_prefix).dim(),
|
||||||
|
Span::from(layout.output_block.subsequent_prefix),
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ expression: rendered
|
|||||||
│ ough_to_wrap
|
│ ough_to_wrap
|
||||||
│ second_token_is_also_lon
|
│ second_token_is_also_lon
|
||||||
│ … +1 lines
|
│ … +1 lines
|
||||||
|
└ (no output)
|
||||||
|
|||||||
@@ -4,3 +4,4 @@ expression: rendered
|
|||||||
---
|
---
|
||||||
• Ran echo one
|
• Ran echo one
|
||||||
│ echo two
|
│ echo two
|
||||||
|
└ (no output)
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ expression: rendered
|
|||||||
• Ran set -o pipefail
|
• Ran set -o pipefail
|
||||||
│ cargo test
|
│ cargo test
|
||||||
│ --all-features --quiet
|
│ --all-features --quiet
|
||||||
|
└ (no output)
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ source: tui/src/history_cell.rs
|
|||||||
expression: rendered
|
expression: rendered
|
||||||
---
|
---
|
||||||
• Ran echo ok
|
• Ran echo ok
|
||||||
|
└ (no output)
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ expression: rendered
|
|||||||
• Ran a_very_long_token_
|
• Ran a_very_long_token_
|
||||||
│ without_spaces_to_
|
│ without_spaces_to_
|
||||||
│ force_wrapping
|
│ force_wrapping
|
||||||
|
└ (no output)
|
||||||
|
|||||||
Reference in New Issue
Block a user