aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
authorMichael Davis2022-11-03 06:09:21 +0000
committerGitHub2022-11-03 06:09:21 +0000
commitba394dca6d3a5b52622c4d7b0d3aba7c30af9701 (patch)
treeb5ee33c8246d295a9ac2a74bada35d1cc37218f6 /helix-view
parent1bed2f30435cfa45502ad2c481a1f4ffe4a1119a (diff)
Fix panic from two windows editing the same document (#4570)
* Clamp highlighting range to be within document This fixes a panic possible when two vsplits of the same document exist and enough lines are deleted from the document so that one of the windows focuses past the end of the document. * Ensure cursor is in view on window change If two windows are editing the same document, one may delete enough of the document so that the other window is pointing at a blank page (past the document end). In this change we ensure that the cursor is within view whenever we switch to a new window (for example with `<C-w>w`). * Update helix-term/src/ui/editor.rs Co-authored-by: Blaž Hrastnik <blaz@mxxn.io> Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/src/editor.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 47edf303..bb9616e8 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -1223,9 +1223,11 @@ 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 leaving the view: mode should reset and the cursor should be
+ // within view
if prev_id != view_id {
self.mode = Mode::Normal;
+ self.ensure_cursor_in_view(view_id);
}
}
@@ -1234,9 +1236,11 @@ impl Editor {
self.tree.focus_next();
let id = self.tree.focus;
- // if leaving the view: mode should reset
+ // 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);
}
}