diff options
author | Kirill Chibisov <contact@kchibisov.com> | 2023-11-14 23:17:59 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-14 23:17:59 +0400 |
commit | d83d5af2b571e5dc2c5c622277096a91c04ca7eb (patch) | |
tree | 9b8ce3c569e664c91399a52d37471b07ce0d0207 /alacritty/src/input.rs | |
parent | 13834d4de80b2a163f7d1838d34f67f088d2c218 (diff) | |
download | r-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.rs | 50 |
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)), |