@@ -396,6 +396,7 @@ fn more(
396396
397397 loop {
398398 let mut wrong_key = None ;
399+
399400 if event:: poll ( Duration :: from_millis ( 100 ) ) ? {
400401 match event:: read ( ) ? {
401402 // --- Quit ---
@@ -422,7 +423,12 @@ fn more(
422423 if pager. eof_reached {
423424 return Ok ( ( ) ) ;
424425 }
425- pager. page_down ( ) ;
426+ if pager. is_seekable ( ) {
427+ pager. page_down ( ) ;
428+ } else {
429+ pager. read_and_print_next ( pager. content_rows , stdout) ?;
430+ continue ;
431+ }
426432 }
427433 Event :: Key ( KeyEvent {
428434 code : KeyCode :: Enter | KeyCode :: Char ( 'j' ) ,
@@ -432,7 +438,12 @@ fn more(
432438 if pager. eof_reached {
433439 return Ok ( ( ) ) ;
434440 }
435- pager. next_line ( ) ;
441+ if pager. is_seekable ( ) {
442+ pager. next_line ( ) ;
443+ } else {
444+ pager. read_and_print_next ( 1 , stdout) ?;
445+ continue ;
446+ }
436447 }
437448
438449 // --- Backward Navigation (Files Only) ---
@@ -666,6 +677,22 @@ impl<'a> Pager<'a> {
666677 . unwrap ( ) ;
667678 }
668679
680+ fn read_and_print_next ( & mut self , lines : usize , stdout : & mut Stdout ) -> UResult < ( ) > {
681+ queue ! ( stdout, Clear ( ClearType :: CurrentLine ) ) ?; // Clear prompt
682+ let mut line = String :: new ( ) ;
683+ for _ in 0 ..lines {
684+ line. clear ( ) ;
685+ if self . reader . read_line ( & mut line) ? == 0 {
686+ self . eof_reached = true ;
687+ break ;
688+ }
689+ stdout. write_all ( format ! ( "\r {}" , line) . as_bytes ( ) ) ?;
690+ }
691+ self . draw_prompt ( stdout, None ) ;
692+ stdout. flush ( ) ?;
693+ Ok ( ( ) )
694+ }
695+
669696 fn load_visible_lines ( & mut self ) -> UResult < ( ) > {
670697 self . lines . clear ( ) ;
671698 self . lines_squeezed = 0 ;
@@ -679,7 +706,7 @@ impl<'a> Pager<'a> {
679706 line. clear ( ) ;
680707 if self . reader . read_line ( & mut line) ? == 0 {
681708 self . eof_reached = true ;
682- break ; // EOF
709+ break ;
683710 }
684711
685712 if self . should_squeeze_line ( & line) {
@@ -743,7 +770,7 @@ impl<'a> Pager<'a> {
743770 let bytes_read = self . reader . read_line ( & mut line) ?;
744771 if bytes_read == 0 {
745772 self . eof_reached = true ;
746- break ; // EOF
773+ break ;
747774 }
748775
749776 byte_position += bytes_read as u64 ;
0 commit comments