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/lib/arg.c | 6 ++++-- src/main.c | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/lib/arg.c b/src/lib/arg.c index 993f7fa..bb2928c 100644 --- a/src/lib/arg.c +++ b/src/lib/arg.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include "arg.h" @@ -24,9 +25,10 @@ void help(void) { "binary\n" "\t-r print everything (headers, line numbers, etc.) to " "stdout (or equivalent)\n" - "\t-p print file with the pager (uses less)\n" + "\t-p disable or enable pager (uses less)\n" "\t-n manually set the name of the file shown in the title\n" - // "\t-e NONFUNCTIONAL (will be added soon) link extension to lat\n" + // "\t-e NONFUNCTIONAL (will be added soon) link extension + // to lat\n" "\t-V show program version\n" "\t-h display this help text\n\n"); printf("environment:\n" 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