diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index a567815fcaa6..36cb295cea4c 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -175,7 +175,7 @@ impl Application { nr_of_files += 1; if file.is_dir() { return Err(anyhow::anyhow!( - "expected a path to file, found a directory. (to open a directory pass it as first argument)" + "expected a path to file, but found a directory: {file:?}. (to open a directory pass it as first argument)" )); } else { // If the user passes in either `--vsplit` or @@ -189,6 +189,7 @@ impl Application { Some(Layout::Horizontal) => Action::HorizontalSplit, None => Action::Load, }; + let old_id = editor.document_id_by_path(&file); let doc_id = match editor.open(&file, action) { // Ignore irregular files during application init. Err(DocumentOpenError::IrregularFile) => { @@ -196,6 +197,11 @@ impl Application { continue; } Err(err) => return Err(anyhow::anyhow!(err)), + // We can't open more than 1 buffer for 1 file, in this case we already have opened this file previously + Ok(doc_id) if old_id == Some(doc_id) => { + nr_of_files -= 1; + doc_id + } Ok(doc_id) => doc_id, }; // with Action::Load all documents have the same view diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs index a3a27a07626a..516bfd7c31b1 100644 --- a/helix-term/src/main.rs +++ b/helix-term/src/main.rs @@ -154,8 +154,7 @@ FLAGS: }); // TODO: use the thread local executor to spawn the application task separately from the work pool - let mut app = - Application::new(args, config, lang_loader).context("unable to create new application")?; + let mut app = Application::new(args, config, lang_loader).context("unable to start Helix")?; let exit_code = app.run(&mut EventStream::new()).await?; diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index aa9a11533bbb..4fc3f4700a1e 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -1718,10 +1718,14 @@ impl Editor { Ok(doc_id) } + pub fn document_id_by_path(&self, path: &Path) -> Option { + self.document_by_path(path).map(|doc| doc.id) + } + // ??? possible use for integration tests pub fn open(&mut self, path: &Path, action: Action) -> Result { let path = helix_stdx::path::canonicalize(path); - let id = self.document_by_path(&path).map(|doc| doc.id); + let id = self.document_id_by_path(&path); let id = if let Some(id) = id { id