aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/input.rs
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2023-11-14 23:17:59 +0400
committerGitHub <noreply@github.com>2023-11-14 23:17:59 +0400
commitd83d5af2b571e5dc2c5c622277096a91c04ca7eb (patch)
tree9b8ce3c569e664c91399a52d37471b07ce0d0207 /alacritty/src/input.rs
parent13834d4de80b2a163f7d1838d34f67f088d2c218 (diff)
downloadr-alacritty-d83d5af2b571e5dc2c5c622277096a91c04ca7eb.tar.gz
r-alacritty-d83d5af2b571e5dc2c5c622277096a91c04ca7eb.tar.bz2
r-alacritty-d83d5af2b571e5dc2c5c622277096a91c04ca7eb.zip
Fix Vi cursor not being dirty when scrolling
Diffstat (limited to 'alacritty/src/input.rs')
-rw-r--r--alacritty/src/input.rs50
1 files changed, 23 insertions, 27 deletions
diff --git a/alacritty/src/input.rs b/alacritty/src/input.rs
index 3c11c435..2c853488 100644
--- a/alacritty/src/input.rs
+++ b/alacritty/src/input.rs
@@ -328,37 +328,33 @@ impl<T: EventListener> Execute<T> for Action {
Action::IncreaseFontSize => ctx.change_font_size(FONT_SIZE_STEP),
Action::DecreaseFontSize => ctx.change_font_size(FONT_SIZE_STEP * -1.),
Action::ResetFontSize => ctx.reset_font_size(),
- Action::ScrollPageUp => {
+ Action::ScrollPageUp
+ | Action::ScrollPageDown
+ | Action::ScrollHalfPageUp
+ | Action::ScrollHalfPageDown => {
// Move vi mode cursor.
let term = ctx.terminal_mut();
- let scroll_lines = term.screen_lines() as i32;
- term.vi_mode_cursor = term.vi_mode_cursor.scroll(term, scroll_lines);
-
- ctx.scroll(Scroll::PageUp);
- },
- Action::ScrollPageDown => {
- // Move vi mode cursor.
- let term = ctx.terminal_mut();
- let scroll_lines = -(term.screen_lines() as i32);
- term.vi_mode_cursor = term.vi_mode_cursor.scroll(term, scroll_lines);
-
- ctx.scroll(Scroll::PageDown);
- },
- Action::ScrollHalfPageUp => {
- // Move vi mode cursor.
- let term = ctx.terminal_mut();
- let scroll_lines = term.screen_lines() as i32 / 2;
- term.vi_mode_cursor = term.vi_mode_cursor.scroll(term, scroll_lines);
+ let (scroll, amount) = match self {
+ Action::ScrollPageUp => (Scroll::PageUp, term.screen_lines() as i32),
+ Action::ScrollPageDown => (Scroll::PageDown, -(term.screen_lines() as i32)),
+ Action::ScrollHalfPageUp => {
+ let amount = term.screen_lines() as i32 / 2;
+ (Scroll::Delta(amount), amount)
+ },
+ Action::ScrollHalfPageDown => {
+ let amount = -(term.screen_lines() as i32 / 2);
+ (Scroll::Delta(amount), amount)
+ },
+ _ => unreachable!(),
+ };
- ctx.scroll(Scroll::Delta(scroll_lines));
- },
- Action::ScrollHalfPageDown => {
- // Move vi mode cursor.
- let term = ctx.terminal_mut();
- let scroll_lines = -(term.screen_lines() as i32 / 2);
- term.vi_mode_cursor = term.vi_mode_cursor.scroll(term, scroll_lines);
+ let old_vi_cursor = term.vi_mode_cursor;
+ term.vi_mode_cursor = term.vi_mode_cursor.scroll(term, amount);
+ if old_vi_cursor != term.vi_mode_cursor {
+ ctx.mark_dirty();
+ }
- ctx.scroll(Scroll::Delta(scroll_lines));
+ ctx.scroll(scroll);
},
Action::ScrollLineUp => ctx.scroll(Scroll::Delta(1)),
Action::ScrollLineDown => ctx.scroll(Scroll::Delta(-1)),