Fix initial vi cursor position while in scrollback

Fixes #4968.
This commit is contained in:
Christian Duerr 2021-04-14 19:39:35 +00:00 committed by GitHub
parent 37f638fc42
commit 05917b2740
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 2 deletions

View File

@ -18,6 +18,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Regex terminal hints ([see features.md](./docs/features.md#hints))
- macOS keybinding (cmd+alt+H) hiding all windows other than Alacritty
### Changed
- The vi mode cursor is now created in the top-left if the terminal cursor is invisible
### Fixed
- Alacritty failing to start on X11 with invalid DPI reported by XRandr

View File

@ -612,8 +612,15 @@ impl<T> Term<T> {
self.mode ^= TermMode::VI;
if self.mode.contains(TermMode::VI) {
// Reset vi mode cursor position to match primary cursor.
self.vi_mode_cursor = ViModeCursor::new(self.grid.cursor.point);
let display_offset = self.grid.display_offset() as i32;
if self.grid.cursor.point.line > self.bottommost_line() - display_offset {
// Move cursor to top-left if terminal cursor is not visible.
let point = Point::new(Line(-display_offset), Column(0));
self.vi_mode_cursor = ViModeCursor::new(point);
} else {
// Reset vi mode cursor position to match primary cursor.
self.vi_mode_cursor = ViModeCursor::new(self.grid.cursor.point);
}
}
// Update UI about cursor blinking state changes.