Hi Klemens,
Klemens Nanni wrote on Thu, Oct 28, 2021 at 11:19:30PM +0000:
> On Fri, Oct 29, 2021 at 12:57:54AM +0200, Ingo Schwarze wrote:
>> MANPAGER=firefox man -T html $(ifconfig -C)
> This doesn't work if firefox is already running
It is true that it sometimes works and sometimes fails due to a race
condition caused by firefox, but that is kind of orthogonal to benno@'s
question.
> as the MANPAGER firefox process exits immediately after sending the
> file/link to the running process,
I consider that a bug in firefox. If a program is instructed to open a
file, and in particular a file in /tmp/, it must not exit before actually
opening the file.
> which causes mandoc to exit after removing the temporary file,
> by which time firefox fails to open the no longer exiting file.
Is there a way how man(1) could work around that braindead behaviour
of firefox? I don't want to commit the following patch - which delays
program exit of man(1) after the pager exits - because the delay is
annoying when using a reasonable pager like less(1).
If someone can come up with an acceptable idea for a workaround,
or if someone can fix firefox, that will be welcome...
Yours,
Ingo
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/main.c,v
retrieving revision 1.262
diff -u -p -r1.262 main.c
--- main.c 4 Oct 2021 21:28:50 -0000 1.262
+++ main.c 29 Oct 2021 00:06:24 -0000
@@ -1203,6 +1203,7 @@ woptions(char *arg, enum mandoc_os *os_e
static void
run_pager(struct outstate *outst, char *tag_target)
{
+ const struct timespec delay = { 1, 0 };
int signum, status;
pid_t man_pgid, tc_pgid;
pid_t pager_pid, wait_pid;
@@ -1252,6 +1253,7 @@ run_pager(struct outstate *outst, char *
signum = WSTOPSIG(status);
}
+ nanosleep(&delay, NULL);
}
static pid_t