aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/src/editor.rs23
-rw-r--r--helix-view/src/tree.rs6
2 files changed, 22 insertions, 7 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index d6c89693..520a425c 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -1091,12 +1091,33 @@ impl Editor {
};
}
+ pub fn focus(&mut self, view_id: ViewId) {
+ let prev_id = std::mem::replace(&mut self.tree.focus, view_id);
+
+ // if leaving the view: mode should reset
+ if prev_id != view_id {
+ let doc_id = self.tree.get(prev_id).doc;
+ self.documents.get_mut(&doc_id).unwrap().mode = Mode::Normal;
+ }
+ }
+
pub fn focus_next(&mut self) {
+ let prev_id = self.tree.focus;
self.tree.focus_next();
+ let id = self.tree.focus;
+
+ // if leaving the view: mode should reset
+ if prev_id != id {
+ let doc_id = self.tree.get(prev_id).doc;
+ self.documents.get_mut(&doc_id).unwrap().mode = Mode::Normal;
+ }
}
pub fn focus_direction(&mut self, direction: tree::Direction) {
- self.tree.focus_direction(direction);
+ let current_view = self.tree.focus;
+ if let Some(id) = self.tree.find_split_in_direction(current_view, direction) {
+ self.focus(id)
+ }
}
pub fn swap_split_in_direction(&mut self, direction: tree::Direction) {
diff --git a/helix-view/src/tree.rs b/helix-view/src/tree.rs
index c4474c33..eaf1dbd2 100644
--- a/helix-view/src/tree.rs
+++ b/helix-view/src/tree.rs
@@ -504,12 +504,6 @@ impl Tree {
Some(child_id)
}
- pub fn focus_direction(&mut self, direction: Direction) {
- if let Some(id) = self.find_split_in_direction(self.focus, direction) {
- self.focus = id;
- }
- }
-
pub fn focus_next(&mut self) {
// This function is very dumb, but that's because we don't store any parent links.
// (we'd be able to go parent.next_sibling() recursively until we find something)