better handling of the closed buffer history

pull/13568/head
Taylor Plewe 2025-05-18 18:25:35 -06:00
parent 56a55d784f
commit 0b967fa5d9
2 changed files with 8 additions and 9 deletions

View File

@ -330,13 +330,10 @@ fn buffer_reopen(
return Ok(()); return Ok(());
} }
if let Some(last_closed_doc_path) = cx.editor.document_history if let Some(last_closed_doc_path) = cx.editor.closed_document_paths.pop()
.iter()
.filter(|path| cx.editor.document_by_path(path).is_none())
.last()
.cloned()
{ {
cx.editor.open(&last_closed_doc_path, Action::Load)?; let id = cx.editor.open(&last_closed_doc_path, Action::Load)?;
cx.editor.switch(id, Action::Load);
} }
Ok(()) Ok(())
} }

View File

@ -1060,7 +1060,7 @@ pub struct Editor {
pub tree: Tree, pub tree: Tree,
pub next_document_id: DocumentId, pub next_document_id: DocumentId,
pub documents: BTreeMap<DocumentId, Document>, pub documents: BTreeMap<DocumentId, Document>,
pub document_history: Vec<PathBuf>, pub closed_document_paths: Vec<PathBuf>,
// We Flatten<> to resolve the inner DocumentSavedEventFuture. For that we need a stream of streams, hence the Once<>. // We Flatten<> to resolve the inner DocumentSavedEventFuture. For that we need a stream of streams, hence the Once<>.
// https://stackoverflow.com/a/66875668 // https://stackoverflow.com/a/66875668
@ -1212,7 +1212,7 @@ impl Editor {
tree: Tree::new(area), tree: Tree::new(area),
next_document_id: DocumentId::default(), next_document_id: DocumentId::default(),
documents: BTreeMap::new(), documents: BTreeMap::new(),
document_history: Vec::new(), closed_document_paths: Vec::new(),
saves: HashMap::new(), saves: HashMap::new(),
save_queue: SelectAll::new(), save_queue: SelectAll::new(),
write_count: 0, write_count: 0,
@ -1799,7 +1799,6 @@ impl Editor {
let id = self.new_document(doc); let id = self.new_document(doc);
self.launch_language_servers(id); self.launch_language_servers(id);
self.document_history.push(path);
helix_event::dispatch(DocumentDidOpen { helix_event::dispatch(DocumentDidOpen {
editor: self, editor: self,
@ -1872,6 +1871,9 @@ impl Editor {
} }
let doc = self.documents.remove(&doc_id).unwrap(); let doc = self.documents.remove(&doc_id).unwrap();
if let Some(path) = doc.path() {
self.closed_document_paths.push(path.clone());
}
// If the document we removed was visible in all views, we will have no more views. We don't // If the document we removed was visible in all views, we will have no more views. We don't
// want to close the editor just for a simple buffer close, so we need to create a new view // want to close the editor just for a simple buffer close, so we need to create a new view