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 Term { self.selection = self.selection.take().and_then(|s| s.rotate(self, ®ion, -(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(®ion, lines); } @@ -581,6 +587,14 @@ impl Term { // Scroll selection. self.selection = self.selection.take().and_then(|s| s.rotate(self, ®ion, 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(®ion, lines); }