Hello,
I would like to propose the following patch for Lynx 2.9.0:
$ diff lynx2.9.0/src/HTAlert.c.orig lynx2.9.0/src/HTAlert.c
62a63,66
> if (LYFailOnAlert) {
> alert_occurred = TRUE;
> }
>
$ diff lynx2.9.0/src/LYGlobalDefs.h.orig lynx2.9.0/src/LYGlobalDefs.h
669a670,671
> extern BOOLEAN LYFailOnAlert;
> extern BOOLEAN alert_occurred;
$ diff lynx2.9.0/src/LYMain.c.orig lynx2.9.0/src/LYMain.c
731a732,734
> BOOLEAN LYFailOnAlert = FALSE;
> BOOLEAN alert_occurred = FALSE;
>
919c922,927
< exit(code);
---
>
> if (LYFailOnAlert && alert_occurred) {
> exit(EXIT_FAILURE);
> } else {
> exit(code);
> }
3548a3557,3560
> PARSE_SET(
> "fail_on_alert", 4|SET_ARG, LYFailOnAlert,
> "exit with error code if any alert is written"
> ),
This patch introduces a new command-line option, -fail_on_alert, and a
corresponding global flag LYFailOnAlert.
The patch modifies HTAlert.c, LYGlobalDefs.h, and LYMain.c to track whether an
alert has occurred during a session. If the -fail_on_alert flag is set and the
alert_occurred boolean is triggered, Lynx will now exit with EXIT_FAILURE
regardless of the standard exit code.
Currently, detecting if a Lynx session encountered an alert (such as a 403
Forbidden error) from a script is unnecessarily difficult. Without this patch,
one has to resort to convoluted shell piping and stderr scraping, for example:
set -e; set -o pipefail; ((lynx -stderr -source "$URL" 3>&1 1>&2 2>&3 3>&- |
(grep -F -x 'Alert!: HTTP/1.0 403 Forbidden' || test $? -eq 1) | cmp -s -
/dev/null) 3>&1 1>&2 2>&3 3>&-) > ...
This approach is brittle and hard to maintain. Providing a built-in way to fail
on alerts aligns Lynx with similar functional options available in other CLI
tools like curl (--fail) and wget.
I believe this is a useful addition for anyone using Lynx in automated
environments or CI/CD pipelines.