Skip to content

Commit 61ddf17

Browse files
committed
dont redraw for stdin streaming
1 parent d589383 commit 61ddf17

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

src/uu/more/src/more.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)