From 925ba68c3ca97b8d437f95f3b329b50f43238907 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Fri, 9 Jun 2023 13:52:14 -0400 Subject: Add auto-pager --- src/main.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 5d4a097..23e59b8 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,6 @@ #include #include +#include #include #include "arg.h" @@ -52,10 +53,25 @@ void run(FILE *fp, char *filename, bool tty) { struct filedata f; f = readfile(fp, conf.isstdin); + // any/all processing to be done + // TODO: maybe multithread? + conf.process = (tty && !f.binary); + if (conf.process) { // file display processing + loadlines(&f); + } + if (conf.extension != NULL) { // TODO } + struct winsize w; + + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 || w.ws_col != 0) { + if (w.ws_row <= f.lc + 5) { + conf.pager = !conf.pager; + } + } + if (conf.pager) { st = popen("less", "w"); err = st; @@ -78,12 +94,6 @@ void run(FILE *fp, char *filename, bool tty) { printheadertop(filename, f.binary); } - // any/all processing to be done - conf.process = (tty && !f.binary); - if (conf.process) { // file display processing - loadlines(&f); - } - if (conf.process) { int linecount = 1; for (int i = 0; i < f.lc; i++) { -- cgit v1.2.3