diff options
-rw-r--r-- | more.c | 14 | ||||
-rw-r--r-- | util-linux/more.c | 14 |
2 files changed, 20 insertions, 8 deletions
@@ -71,7 +71,7 @@ extern int more_main(int argc, char **argv) int please_display_more_prompt = 0; struct stat st; FILE *file; - int len; + int len, page_height; #if defined BB_FEATURE_AUTOWIDTH && defined BB_FEATURE_USE_TERMIOS struct winsize win = { 0, 0, 0, 0 }; @@ -114,6 +114,7 @@ extern int more_main(int argc, char **argv) #endif len = 0; + page_height = terminal_height; while ((c = getc(file)) != EOF) { if (please_display_more_prompt) { @@ -162,6 +163,7 @@ extern int more_main(int argc, char **argv) fflush(stdout); #endif len=0; + page_height = terminal_height; } /* @@ -188,10 +190,14 @@ extern int more_main(int argc, char **argv) * no lines get lost off the top. */ if (len) { div_t result = div( len, terminal_width); - if (result.quot) - terminal_height-=(result.quot-1); + if (result.quot) { + if (result.rem) + page_height-=result.quot; + else + page_height-=(result.quot-1); + } } - if (++lines == terminal_height) { + if (++lines == page_height) { please_display_more_prompt = 1; } len=0; diff --git a/util-linux/more.c b/util-linux/more.c index 77e0c2f..2cfb3a8 100644 --- a/util-linux/more.c +++ b/util-linux/more.c @@ -71,7 +71,7 @@ extern int more_main(int argc, char **argv) int please_display_more_prompt = 0; struct stat st; FILE *file; - int len; + int len, page_height; #if defined BB_FEATURE_AUTOWIDTH && defined BB_FEATURE_USE_TERMIOS struct winsize win = { 0, 0, 0, 0 }; @@ -114,6 +114,7 @@ extern int more_main(int argc, char **argv) #endif len = 0; + page_height = terminal_height; while ((c = getc(file)) != EOF) { if (please_display_more_prompt) { @@ -162,6 +163,7 @@ extern int more_main(int argc, char **argv) fflush(stdout); #endif len=0; + page_height = terminal_height; } /* @@ -188,10 +190,14 @@ extern int more_main(int argc, char **argv) * no lines get lost off the top. */ if (len) { div_t result = div( len, terminal_width); - if (result.quot) - terminal_height-=(result.quot-1); + if (result.quot) { + if (result.rem) + page_height-=result.quot; + else + page_height-=(result.quot-1); + } } - if (++lines == terminal_height) { + if (++lines == page_height) { please_display_more_prompt = 1; } len=0; |