@@ -539,6 +539,10 @@ impl<U: EventListener> Crosswords<U> {
539
539
let previous_cursor =
540
540
mem:: replace ( & mut self . damage . last_cursor , self . grid . cursor . pos ) ;
541
541
542
+ let previous_vim_cursor = mem:: replace (
543
+ & mut self . damage . last_vi_cursor_point ,
544
+ Some ( self . vi_mode_cursor . pos ) ,
545
+ ) ;
542
546
if self . damage . full {
543
547
return TermDamage :: Full ;
544
548
}
@@ -550,6 +554,13 @@ impl<U: EventListener> Crosswords<U> {
550
554
let previous_line = previous_cursor. row . 0 as usize ;
551
555
self . damage . damage_line ( previous_line) ;
552
556
}
557
+ if let ( Some ( prev_cursor) , Some ( curr_cursor) ) =
558
+ ( previous_vim_cursor, self . damage . last_vi_cursor_point )
559
+ {
560
+ if prev_cursor != curr_cursor {
561
+ self . damage . damage_line ( prev_cursor. row . 0 as usize ) ;
562
+ }
563
+ }
553
564
554
565
// Always damage current cursor.
555
566
self . damage_cursor ( ) ;
@@ -877,6 +888,12 @@ impl<U: EventListener> Crosswords<U> {
877
888
self . damage_line ( cursor_line) ;
878
889
}
879
890
891
+ #[ inline]
892
+ pub fn damage_vi_cursor_line ( & mut self ) {
893
+ let vi_cursor_line = self . vi_mode_cursor . pos . row . 0 as usize ;
894
+ self . damage . damage_line ( vi_cursor_line) ;
895
+ }
896
+
880
897
/// Damage an entire line
881
898
#[ inline]
882
899
pub fn damage_line ( & mut self , line : usize ) {
@@ -887,6 +904,7 @@ impl<U: EventListener> Crosswords<U> {
887
904
pub fn damage_cursor ( & mut self ) {
888
905
// Use line-based damage approach for better reliability
889
906
self . damage_cursor_line ( ) ;
907
+ self . damage_vi_cursor_line ( ) ;
890
908
}
891
909
892
910
#[ inline]
0 commit comments