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.

Reply via email to