Fix closing buffer with custom keymap (#3633)

* Fix closing buffer with custom keymap

* Add comment explaining if
pull/3678/head
A-Walrus 2 years ago committed by GitHub
parent ec28b2b5cc
commit 45dbcb6783
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1263,17 +1263,20 @@ impl Component for EditorView {
if cx.editor.should_close() { if cx.editor.should_close() {
return EventResult::Ignored(None); return EventResult::Ignored(None);
} }
let config = cx.editor.config(); // if the focused view still exists and wasn't closed
let mode = cx.editor.mode(); if cx.editor.tree.contains(focus) {
let view = cx.editor.tree.get_mut(focus); let config = cx.editor.config();
let doc = cx.editor.documents.get_mut(&view.doc).unwrap(); let mode = cx.editor.mode();
let view = cx.editor.tree.get_mut(focus);
view.ensure_cursor_in_view(doc, config.scrolloff); let doc = cx.editor.documents.get_mut(&view.doc).unwrap();
// Store a history state if not in insert mode. This also takes care of view.ensure_cursor_in_view(doc, config.scrolloff);
// committing changes when leaving insert mode.
if mode != Mode::Insert { // Store a history state if not in insert mode. This also takes care of
doc.append_changes_to_history(view.id); // committing changes when leaving insert mode.
if mode != Mode::Insert {
doc.append_changes_to_history(view.id);
}
} }
EventResult::Consumed(callback) EventResult::Consumed(callback)

@ -270,10 +270,18 @@ impl Tree {
}) })
} }
/// Get reference to a [`view`] by index.
/// # Panics
///
/// Panics if `index` is not in self.nodes, or if the node's content is not [`Content::View`] . This can be checked with [`contains`]
pub fn get(&self, index: ViewId) -> &View { pub fn get(&self, index: ViewId) -> &View {
self.try_get(index).unwrap() self.try_get(index).unwrap()
} }
/// Try to get reference to a [`view`] by index. Returns `None` if node content is not a [`Content::View`]
/// # Panics
///
/// Panics if `index` is not in self.nodes. This can be checked with [`Self::contains`]
pub fn try_get(&self, index: ViewId) -> Option<&View> { pub fn try_get(&self, index: ViewId) -> Option<&View> {
match &self.nodes[index] { match &self.nodes[index] {
Node { Node {
@ -284,6 +292,10 @@ impl Tree {
} }
} }
/// Get a mutable reference to a [`view`] by index.
/// # Panics
///
/// Panics if `index` is not in self.nodes, or if the node's content is not [`Content::View`] . This can be checked with [`Self::contains`]
pub fn get_mut(&mut self, index: ViewId) -> &mut View { pub fn get_mut(&mut self, index: ViewId) -> &mut View {
match &mut self.nodes[index] { match &mut self.nodes[index] {
Node { Node {
@ -294,6 +306,11 @@ impl Tree {
} }
} }
/// Check if tree contains a [`Node`] with a given index.
pub fn contains(&self, index: ViewId) -> bool {
self.nodes.contains_key(index)
}
pub fn is_empty(&self) -> bool { pub fn is_empty(&self) -> bool {
match &self.nodes[self.root] { match &self.nodes[self.root] {
Node { Node {

Loading…
Cancel
Save