@@ -115,8 +115,16 @@ impl<'a> ActionHandler<'a> {
115115 // Scrolling
116116 KeyAction :: ScrollUp => self . handle_scroll ( -1 ) ,
117117 KeyAction :: ScrollDown => self . handle_scroll ( 1 ) ,
118- KeyAction :: ScrollPageUp => self . handle_scroll ( -10 ) ,
119- KeyAction :: ScrollPageDown => self . handle_scroll ( 10 ) ,
118+ KeyAction :: ScrollPageUp => {
119+ // Use terminal height - 1 for standard page scroll (provides context overlap)
120+ let page_size = ( self . state . terminal_size . 1 as i32 ) . saturating_sub ( 1 ) . max ( 1 ) ;
121+ self . handle_scroll ( -page_size)
122+ }
123+ KeyAction :: ScrollPageDown => {
124+ // Use terminal height - 1 for standard page scroll (provides context overlap)
125+ let page_size = ( self . state . terminal_size . 1 as i32 ) . saturating_sub ( 1 ) . max ( 1 ) ;
126+ self . handle_scroll ( page_size)
127+ }
120128 KeyAction :: ScrollToTop => self . handle_scroll_to_top ( ) ,
121129 KeyAction :: ScrollToBottom => self . handle_scroll_to_bottom ( ) ,
122130
@@ -1072,9 +1080,12 @@ mod tests {
10721080 let mut stream = create_test_stream ( ) ;
10731081 state. set_focus ( FocusTarget :: Chat ) ;
10741082
1083+ // Default terminal size is (80, 24), so page size = 24 - 1 = 23
1084+ let expected_page_size = ( state. terminal_size . 1 as usize ) . saturating_sub ( 1 ) . max ( 1 ) ;
1085+
10751086 let result = run_action ( & mut state, & mut stream, KeyAction :: ScrollPageDown ) . await ;
10761087 assert ! ( result. is_ok( ) ) ;
10771088 assert ! ( result. unwrap( ) ) ;
1078- assert_eq ! ( state. chat_scroll, 10 ) ;
1089+ assert_eq ! ( state. chat_scroll, expected_page_size ) ;
10791090 }
10801091}
0 commit comments