aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src')
-rw-r--r--helix-term/src/application.rs26
-rw-r--r--helix-term/src/commands/typed.rs9
2 files changed, 20 insertions, 15 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 2c1047da..0640de3c 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -3,6 +3,7 @@ use futures_util::Stream;
use helix_core::{
config::{default_syntax_loader, user_syntax_loader},
diagnostic::{DiagnosticTag, NumberOrString},
+ path::get_relative_path,
pos_at_coords, syntax, Selection,
};
use helix_lsp::{lsp, util::lsp_pos_to_pos, LspProgressMap};
@@ -489,17 +490,26 @@ impl Application {
);
doc.set_last_saved_revision(doc_save_event.revision);
+
let lines = doc.text().len_lines();
let bytes = doc.text().len_bytes();
- let path_str = doc
- .path()
- .expect("document written without path")
- .to_string_lossy()
- .into_owned();
-
- self.editor
- .set_status(format!("'{}' written, {}L {}B", path_str, lines, bytes));
+ if let Err(err) = doc.set_path(Some(&doc_save_event.path)) {
+ log::error!(
+ "error setting path for doc '{:?}': {}",
+ doc.path(),
+ err.to_string(),
+ );
+ self.editor.set_error(err.to_string());
+ } else {
+ // TODO: fix being overwritten by lsp
+ self.editor.set_status(format!(
+ "'{}' written, {}L {}B",
+ get_relative_path(&doc_save_event.path).to_string_lossy(),
+ lines,
+ bytes
+ ));
+ }
}
pub fn handle_terminal_events(&mut self, event: Result<CrosstermEvent, crossterm::ErrorKind>) {
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index 375e7b4f..35c84601 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -268,11 +268,6 @@ fn write_impl(
let jobs = &mut cx.jobs;
let doc = doc_mut!(cx.editor);
- if let Some(ref path) = path {
- doc.set_path(Some(path.as_ref().as_ref()))
- .context("invalid filepath")?;
- }
-
if doc.path().is_none() {
bail!("cannot write a buffer without a filename");
}
@@ -292,7 +287,7 @@ fn write_impl(
None
};
- doc.format_and_save(fmt, force)?;
+ doc.format_and_save(fmt, path.map(AsRef::as_ref), force)?;
if path.is_some() {
let id = doc.id();
@@ -607,7 +602,7 @@ fn write_all_impl(
None
};
- doc.format_and_save(fmt, force)?;
+ doc.format_and_save::<_, PathBuf>(fmt, None, force)?;
}
if quit {