From d38e6c5ec0bea10965b978ecc1fa9f792702c395 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Fri, 15 Jan 2021 15:42:56 -0500 Subject: Automatically pipe hilex ANSI output to PAGER --- bin/hilex.c | 40 +++++++++++++++++++++++++++++++++++++++- bin/man1/hilex.1 | 17 ++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/hilex.c b/bin/hilex.c index 58a2ad30..5bf7e9a6 100644 --- a/bin/hilex.c +++ b/bin/hilex.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -94,6 +95,43 @@ enum Option { typedef void Header(const char *opts[]); typedef void Output(const char *opts[], enum Class class, const char *text); +static bool tty; +static void ansiHeader(const char *opts[]) { + (void)opts; + if (!(tty = isatty(STDOUT_FILENO))) return; + const char *shell = getenv("SHELL"); + const char *pager = getenv("PAGER"); + if (!shell) shell = "/bin/sh"; + if (!pager) pager = "less"; + setenv("LESS", "FRX", 0); + + int rw[2]; + int error = pipe(rw); + if (error) err(EX_OSERR, "pipe"); + + pid_t pid = fork(); + if (pid < 0) err(EX_OSERR, "fork"); + if (!pid) { + dup2(rw[0], STDIN_FILENO); + close(rw[0]); + close(rw[1]); + execl(shell, shell, "-c", pager, NULL); + err(EX_CONFIG, "%s", shell); + } + dup2(rw[1], STDOUT_FILENO); + close(rw[0]); + close(rw[1]); + setlinebuf(stdout); +} + +static void ansiFooter(const char *opts[]) { + (void)opts; + if (!tty) return; + int status; + fclose(stdout); + wait(&status); +} + static const char *SGR[ClassCap] = { [Keyword] = "37", [Macro] = "32", @@ -250,7 +288,7 @@ static const struct Formatter { Output *format; Header *footer; } Formatters[] = { - { "ansi", NULL, ansiFormat, NULL }, + { "ansi", ansiHeader, ansiFormat, ansiFooter }, { "debug", NULL, debugFormat, NULL }, { "html", htmlHeader, htmlFormat, htmlFooter }, { "irc", ircHeader, ircFormat, NULL }, diff --git a/bin/man1/hilex.1 b/bin/man1/hilex.1 index b742b063..ace0b8cf 100644 --- a/bin/man1/hilex.1 +++ b/bin/man1/hilex.1 @@ -1,4 +1,4 @@ -.Dd January 13, 2021 +.Dd January 15, 2021 .Dt HILEX 1 .Os . @@ -64,6 +64,12 @@ input lexer if one cannot be inferred. .Bl -tag -width Ds .It Cm ansi Output ANSI terminal control sequences. +If standard output is a terminal, +output is piped to +.Ev PAGER +with +.Ev LESS=FRX +if it is not already set. . .It Cm html Output HTML @@ -181,3 +187,12 @@ Inferred for .Pa *.txt files. .El +. +.Sh ENVIRONMENT +.Bl -tag -width "PAGER" +.It Ev PAGER +The command to pipe ANSI output to +if standard output is a terminal. +The default is +.Ev PAGER=less . +.El -- cgit 1.4.1 /photo.causal.agency/2024-07-04/film?id=4de2e36bc2c165102db6a1a64974399d8e8d90b1&showmsg=1&follow=1'>film (unfollow)
Commit message (Collapse)Author
2024-12-29Add photos from December 28June McEnroe
2024-12-29Fancify the manual lens textJune McEnroe
2024-12-28Update film preset list with what I expect to keep shootingJune McEnroe
2024-12-28Add the past few months of rolls of filmJune McEnroe
2024-11-13Add Tea with the Black DragonJune McEnroe
I found this in a box on the side of the road being thrown own. It's decent pulp but nothing special. Not even as racist as I expected it to be. Also as one might guess, the author using their initials is a woman, so I only broke one of my rules when it comes to book selection.
2024-11-05Add a bunch of photosJune McEnroe
2024-10-12Publish "film review"June McEnroe
2024-10-12Add photos from October 6June McEnroe
2024-10-12Add photos from October 5June McEnroe
2024-10-09Add photos from October 1June McEnroe
Ok the first 3 are from September 29 but I didn't want to spoil the black and white roll.
2024-10-07Add photos from September 29June McEnroe
2024-10-07Add photos from September 28June McEnroe
2024-10-07Add photos from September 22June McEnroe
2024-09-25Add photos from September 15June McEnroe
2024-09-24Add photos from September 14June McEnroe
2024-09-24Add photos from September 12June McEnroe
2024-09-24Add photos from September 7June McEnroe
2024-09-24Allow not having descriptionsJune McEnroe
I'm sorry, I can't keep writing descriptions. It makes posting photos take too long, I often don't know the words for what I'm looking at, and a good description is an entirely different work of art than the photo I took, and I'm just a photographer. It's visual art.
2024-09-23Automatically select the last used lens for a bodyJune McEnroe
2024-09-19Add photos from September 5June McEnroe
Had to prefix the folder number onto these file names manually because they must have come out of a different scanner or something.
2024-09-15Add some more film stocks to the listJune McEnroe
2024-09-13Add photos from September 2June McEnroe
2024-09-13Add Fomapan 200 to films listJune McEnroe
2024-09-10Add August 29 picnic photosJune McEnroe
2024-09-08Apply some bold to trips renderingJune McEnroe
This seems easier to visually scan. The only other thing I'd like is a nicer date rendering but JavaScript is useless for that.
2024-09-08Render trips hopefully more efficientlyJune McEnroe
2024-09-08Allow removing bodies and lensesJune McEnroe
2024-09-08Limit body width so it looks less silly on desktopJune McEnroe
2024-09-07Handle no film being loadedJune McEnroe
2024-09-07Fancy up the text a littleJune McEnroe