aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty_terminal/src/term/mod.rs14
2 files changed, 15 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 50bc907b..fe304c76 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Crash when starting a vi mode search from the bottommost line
- Original scroll position not restored after canceling search
- Clipboard copy skipping non-empty cells when encountering an interrupted tab character
+- Vi mode cursor moving downward when scrolled in history with active output
## 0.8.0
diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs
index 1c29327a..b560d69e 100644
--- a/alacritty_terminal/src/term/mod.rs
+++ b/alacritty_terminal/src/term/mod.rs
@@ -562,6 +562,12 @@ impl<T> Term<T> {
self.selection =
self.selection.take().and_then(|s| s.rotate(self, &region, -(lines as i32)));
+ // Scroll vi mode cursor.
+ let line = &mut self.vi_mode_cursor.point.line;
+ if region.start <= *line && region.end > *line {
+ *line = min(*line + lines, region.end - 1);
+ }
+
// Scroll between origin and bottom
self.grid.scroll_down(&region, lines);
}
@@ -581,6 +587,14 @@ impl<T> Term<T> {
// Scroll selection.
self.selection = self.selection.take().and_then(|s| s.rotate(self, &region, lines as i32));
+ // Scroll vi mode cursor.
+ let viewport_top = Line(-(self.grid.display_offset() as i32));
+ let top = if region.start == 0 { viewport_top } else { region.start };
+ let line = &mut self.vi_mode_cursor.point.line;
+ if (top <= *line) && region.end > *line {
+ *line = max(*line - lines, top);
+ }
+
// Scroll from origin to bottom less number of lines.
self.grid.scroll_up(&region, lines);
}