aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/commands
diff options
context:
space:
mode:
authorSkyler Hawthorne2022-08-24 05:13:41 +0000
committerSkyler Hawthorne2022-10-19 02:31:39 +0000
commit57de4e62519a59aece104867569c2b9ad044af54 (patch)
tree8ab5a88dbdad6f64073aae48a49d13f996ad83eb /helix-term/src/commands
parent7b11e9ac6941188c6f6148961fdd97e34988490e (diff)
various fixes in write-all path
Diffstat (limited to 'helix-term/src/commands')
-rw-r--r--helix-term/src/commands/typed.rs25
1 files changed, 19 insertions, 6 deletions
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index fa2ba5e6..7fd619d9 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -573,13 +573,20 @@ fn write_all_impl(
return Ok(());
}
- let mut errors = String::new();
+ let mut errors: Option<String> = None;
let auto_format = cx.editor.config().auto_format;
let jobs = &mut cx.jobs;
+
// save all documents
for doc in &mut cx.editor.documents.values_mut() {
if doc.path().is_none() {
- errors.push_str("cannot write a buffer without a filename\n");
+ errors = errors
+ .or_else(|| Some(String::new()))
+ .map(|mut errs: String| {
+ errs.push_str("cannot write a buffer without a filename\n");
+ errs
+ });
+
continue;
}
@@ -591,7 +598,7 @@ fn write_all_impl(
doc.auto_format().map(|fmt| {
let callback =
make_format_callback(doc.id(), doc.version(), fmt, Some((None, force)));
- jobs.callback(callback);
+ jobs.add(Job::with_callback(callback).wait_before_exiting());
})
} else {
None
@@ -603,12 +610,12 @@ fn write_all_impl(
}
if quit {
+ cx.block_try_flush_writes()?;
+
if !force {
buffers_remaining_impl(cx.editor)?;
}
- cx.block_try_flush_writes()?;
-
// close all views
let views: Vec<_> = cx.editor.tree.views().map(|(view, _)| view.id).collect();
for view_id in views {
@@ -616,7 +623,13 @@ fn write_all_impl(
}
}
- bail!(errors)
+ if let Some(errs) = errors {
+ if !force {
+ bail!(errs);
+ }
+ }
+
+ Ok(())
}
fn write_all(