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 *.lnk
# End of https://www.toptal.com/developers/gitignore/api/c,macos,windows,linux,c # 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 $(IDIR)
-@mkdir -p $(ODIR) -@mkdir -p $(ODIR)
-@mkdir -p $(BINDIR) -@mkdir -p $(BINDIR)
@echo $(BINDIR)/ >> .gitignore
.PHONY: clean .PHONY: clean
clean: clean:

View File

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

View File

@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdnoreturn.h> #include <stdnoreturn.h>
#include <sys/ioctl.h>
#include <unistd.h> #include <unistd.h>
#include "arg.h" #include "arg.h"
@ -24,9 +25,10 @@ void help(void) {
"binary\n" "binary\n"
"\t-r print everything (headers, line numbers, etc.) to " "\t-r print everything (headers, line numbers, etc.) to "
"stdout (or equivalent)\n" "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-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-V show program version\n"
"\t-h display this help text\n\n"); "\t-h display this help text\n\n");
printf("environment:\n" printf("environment:\n"

View File

@ -1,5 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/ioctl.h>
#include <unistd.h> #include <unistd.h>
#include "arg.h" #include "arg.h"
@ -52,10 +53,25 @@ void run(FILE *fp, char *filename, bool tty) {
struct filedata f; struct filedata f;
f = readfile(fp, conf.isstdin); 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) { if (conf.extension != NULL) {
// TODO // 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) { if (conf.pager) {
st = popen("less", "w"); st = popen("less", "w");
err = st; err = st;
@ -78,12 +94,6 @@ void run(FILE *fp, char *filename, bool tty) {
printheadertop(filename, f.binary); 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) { if (conf.process) {
int linecount = 1; int linecount = 1;
for (int i = 0; i < f.lc; i++) { for (int i = 0; i < f.lc; i++) {