mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-25 02:46:17 +04:00
output stderr
in :sh
popup if shell commands fail (#11239)
* refactor(commands): output `stderr` in `:sh` popup * refactor(commands): switch to `from_utf8_lossy` This way something is always displayed. * refactor: no longer log stderr output on failure
This commit is contained in:
parent
63953e0b9e
commit
cfe80acb6f
@ -5716,27 +5716,24 @@ async fn shell_impl_async(
|
|||||||
process.wait_with_output().await?
|
process.wait_with_output().await?
|
||||||
};
|
};
|
||||||
|
|
||||||
if !output.status.success() {
|
let output = if !output.status.success() {
|
||||||
if !output.stderr.is_empty() {
|
if output.stderr.is_empty() {
|
||||||
let err = String::from_utf8_lossy(&output.stderr).to_string();
|
|
||||||
log::error!("Shell error: {}", err);
|
|
||||||
bail!("Shell error: {}", err);
|
|
||||||
}
|
|
||||||
match output.status.code() {
|
match output.status.code() {
|
||||||
Some(exit_code) => bail!("Shell command failed: status {}", exit_code),
|
Some(exit_code) => bail!("Shell command failed: status {}", exit_code),
|
||||||
None => bail!("Shell command failed"),
|
None => bail!("Shell command failed"),
|
||||||
}
|
}
|
||||||
} else if !output.stderr.is_empty() {
|
|
||||||
log::debug!(
|
|
||||||
"Command printed to stderr: {}",
|
|
||||||
String::from_utf8_lossy(&output.stderr).to_string()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
String::from_utf8_lossy(&output.stderr)
|
||||||
|
// Prioritize `stderr` output over `stdout`
|
||||||
|
} else if !output.stderr.is_empty() {
|
||||||
|
let stderr = String::from_utf8_lossy(&output.stderr);
|
||||||
|
log::debug!("Command printed to stderr: {stderr}");
|
||||||
|
stderr
|
||||||
|
} else {
|
||||||
|
String::from_utf8_lossy(&output.stdout)
|
||||||
|
};
|
||||||
|
|
||||||
let str = std::str::from_utf8(&output.stdout)
|
Ok(Tendril::from(output))
|
||||||
.map_err(|_| anyhow!("Process did not output valid UTF-8"))?;
|
|
||||||
let tendril = Tendril::from(str);
|
|
||||||
Ok(tendril)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn shell(cx: &mut compositor::Context, cmd: &str, behavior: &ShellBehavior) {
|
fn shell(cx: &mut compositor::Context, cmd: &str, behavior: &ShellBehavior) {
|
||||||
|
@ -2308,7 +2308,7 @@ fn run_shell_command(
|
|||||||
));
|
));
|
||||||
compositor.replace_or_push("shell", popup);
|
compositor.replace_or_push("shell", popup);
|
||||||
}
|
}
|
||||||
editor.set_status("Command succeeded");
|
editor.set_status("Command run");
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
Ok(call)
|
Ok(call)
|
||||||
|
Loading…
Reference in New Issue
Block a user