Add auto-pager

This commit is contained in:
Shav Kinderlehrer 2023-06-09 13:52:14 -04:00
parent 1577a74d58
commit 925ba68c3c
5 changed files with 21 additions and 12 deletions

2
.gitignore vendored
View File

@ -130,5 +130,3 @@ $RECYCLE.BIN/
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/c,macos,windows,linux,c
build/

View File

@ -34,7 +34,6 @@ prep:
-@mkdir -p $(IDIR)
-@mkdir -p $(ODIR)
-@mkdir -p $(BINDIR)
@echo $(BINDIR)/ >> .gitignore
.PHONY: clean
clean:

View File

@ -2,7 +2,7 @@
#define ARG_H
#include <stdbool.h>
#define LAT_VERSION "0.12.4"
#define LAT_VERSION "0.13.0"
struct config {
bool isstdin;

View File

@ -1,6 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
#include <sys/ioctl.h>
#include <unistd.h>
#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 <name> manually set the name of the file shown in the title\n"
// "\t-e <program> NONFUNCTIONAL (will be added soon) link extension to lat\n"
// "\t-e <program> 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"

View File

@ -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++) {