mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
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.
This commit is contained in:
parent
6eec14ee37
commit
b474ee1843
@ -1243,16 +1243,7 @@ pub fn focus(&mut self, view_id: ViewId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn focus_next(&mut self) {
|
pub fn focus_next(&mut self) {
|
||||||
let prev_id = self.tree.focus;
|
self.focus(self.tree.next());
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn focus_direction(&mut self, direction: tree::Direction) {
|
pub fn focus_direction(&mut self, direction: tree::Direction) {
|
||||||
|
@ -219,7 +219,7 @@ pub fn remove(&mut self, index: ViewId) {
|
|||||||
|
|
||||||
if self.focus == index {
|
if self.focus == index {
|
||||||
// focus on something else
|
// focus on something else
|
||||||
self.focus_next();
|
self.focus = self.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
stack.push(index);
|
stack.push(index);
|
||||||
@ -521,7 +521,7 @@ fn find_child(&self, id: ViewId, children: &[ViewId], direction: Direction) -> O
|
|||||||
Some(child_id)
|
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.
|
// 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)
|
// (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
|
// For now that's okay though, since it's unlikely you'll be able to open a large enough
|
||||||
@ -532,11 +532,11 @@ pub fn focus_next(&mut self) {
|
|||||||
.skip_while(|&(id, _view)| id != self.focus)
|
.skip_while(|&(id, _view)| id != self.focus)
|
||||||
.skip(1); // Skip focused value
|
.skip(1); // Skip focused value
|
||||||
if let Some((id, _)) = views.next() {
|
if let Some((id, _)) = views.next() {
|
||||||
self.focus = id;
|
id
|
||||||
} else {
|
} else {
|
||||||
// extremely crude, take the first item again
|
// extremely crude, take the first item again
|
||||||
let (key, _) = self.traverse().next().unwrap();
|
let (key, _) = self.traverse().next().unwrap();
|
||||||
self.focus = key;
|
key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user