From b474ee1843d5cb7cb5291bee4166490a223e5aac Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Wed, 16 Nov 2022 18:59:59 -0600 Subject: [PATCH] Factor out common code for focusing the next view (#4607) There is some common code between Editor::focus_next and Editor::focus that can be eliminated by refactoring Tree::focus_next into a function that only returns the next ViewId. --- helix-view/src/editor.rs | 11 +---------- helix-view/src/tree.rs | 8 ++++---- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 4e3a69a2d..23e0a4976 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -1243,16 +1243,7 @@ impl Editor { } 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 and the cursor should be - // within view - if prev_id != id { - self.mode = Mode::Normal; - self.ensure_cursor_in_view(id); - } + self.focus(self.tree.next()); } pub fn focus_direction(&mut self, direction: tree::Direction) { diff --git a/helix-view/src/tree.rs b/helix-view/src/tree.rs index 6174021cb..404840242 100644 --- a/helix-view/src/tree.rs +++ b/helix-view/src/tree.rs @@ -219,7 +219,7 @@ impl Tree { if self.focus == index { // focus on something else - self.focus_next(); + self.focus = self.next(); } stack.push(index); @@ -521,7 +521,7 @@ impl Tree { Some(child_id) } - pub fn focus_next(&mut self) { + pub fn next(&self) -> ViewId { // 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) // For now that's okay though, since it's unlikely you'll be able to open a large enough @@ -532,11 +532,11 @@ impl Tree { .skip_while(|&(id, _view)| id != self.focus) .skip(1); // Skip focused value if let Some((id, _)) = views.next() { - self.focus = id; + id } else { // extremely crude, take the first item again let (key, _) = self.traverse().next().unwrap(); - self.focus = key; + key } }