diff options
Diffstat (limited to 'helix-view/src')
-rw-r--r-- | helix-view/src/editor.rs | 23 | ||||
-rw-r--r-- | helix-view/src/tree.rs | 6 |
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) |