aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2023-06-09 13:52:14 -0400
committerShav Kinderlehrer <[email protected]>2023-06-09 13:56:16 -0400
commit925ba68c3ca97b8d437f95f3b329b50f43238907 (patch)
tree77938c5d4aa68fb7d06888517f80555b5c475b4b /src/main.c
parent1577a74d584bc8ea48aaea2adf137dda936247eb (diff)
downloadlat-925ba68c3ca97b8d437f95f3b329b50f43238907.tar.gz
lat-925ba68c3ca97b8d437f95f3b329b50f43238907.zip
Add auto-pager
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c22
1 files changed, 16 insertions, 6 deletions
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 <stdio.h>
#include <stdlib.h>
+#include <sys/ioctl.h>
#include <unistd.h>
#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++) {