Re: Add -fail_on_alert option to exit with error on alerts
WaitronCharm via Lynx-dev <[email protected]> Wed, 20 May 2026 17:22:19 +0000
| Newsgroups | gmane.comp.web.lynx.devel |
|---|---|
| Message-ID | <L6V5gaU4t9t2zrd5tea-JU4wGWfdxhhgGYycAbtPF5BHq0h4WY519bW4slgkpxOiR1tdUyb9UO7AprmqR_12myuzcOVs03CkQ4Ph0LXbQzI=@proton.me> |
Thanks for the feedback on the proposed -fail_on_alert option.
Following up on our recent thread, I would like to formally suggest integra=
ting this patch into the next official Lynx build.
Having this option natively supported would be highly beneficial for automa=
ted environments, CI/CD pipelines, and scripting, where users need Lynx to =
cleanly exit with an error code the moment an alert is triggered. Merging t=
his upstream would allow the wider community to benefit from more robust er=
ror handling without anyone having to maintain individual forks or local pa=
tches.
Please let me know if any further adjustments, cleanup, or documentation up=
dates are needed to make the patch ready for inclusion in the official sour=
ce.
Thank you.
On Friday, May 8th, 2026 at 1:38 AM, Thomas Dickey <dickey@invisible-island=
.net> wrote:
> On Thu, May 07, 2026 at 07:22:13PM +0000, WaitronCharm via Lynx-dev wrote=
:
> > Hello,
> >=20
> > I would like to propose the following patch for Lynx 2.9.0:
>=20
> It seems useful (thanks)=20
> =20
> > $ diff lynx2.9.0/src/HTAlert.c.orig lynx2.9.0/src/HTAlert.c
> > 62a63,66
> > > if (LYFailOnAlert) {
> > > alert_occurred =3D TRUE;
> > > }
> > >=20
>=20
> hmm - most but not all calls to HTAlert are urgent. I see some cases
> where you might not want to exit immediately:
>=20
> src/GridText.c:13908:=09=09HTAlert(gettext("Very long lines have been tru=
ncated!"));
> src/HTFWriter.c:990:=09 HTAlert(EXECUTION_DISABLED);
> src/LYLocal.c:354:=09HTAlert(gettext("The selected item is not a file or =
a directory! Request ignored."));
> src/LYLocal.c:676:=09HTAlert(gettext("There is already a directory with t=
hat name! Request ignored."));
> src/LYLocal.c:678:=09HTAlert(gettext("There is already a file with that n=
ame! Request ignored."));
> src/LYMain.c:2438:=09 HTAlert(gettext("persistent cookies state will b=
e changed in next session only."));
> src/LYMainLoop.c:5399:=09HTAlert(SHIFT_VS_LINEWRAP);
> src/LYOptions.c:3399:=09=09 HTAlert(UA_PLEASE_USE_LYNX);
>=20
> >=20
> > $ diff lynx2.9.0/src/LYGlobalDefs.h.orig lynx2.9.0/src/LYGlobalDefs.h
> > 669a670,671
> > > extern BOOLEAN LYFailOnAlert;
> > > extern BOOLEAN alert_occurred;
> >=20
> > $ diff lynx2.9.0/src/LYMain.c.orig lynx2.9.0/src/LYMain.c
> > 731a732,734
> > > BOOLEAN LYFailOnAlert =3D FALSE;
> > > BOOLEAN alert_occurred =3D FALSE;
> > >=20
> > 919c922,927
> > < exit(code);
> > ---
> > >=20
> > > if (LYFailOnAlert && alert_occurred) {
> > > exit(EXIT_FAILURE);
> > > } else {
> > > exit(code);
> > > }
> > 3548a3557,3560
> > > PARSE_SET(
> > > "fail_on_alert",=094|SET_ARG,=09=09LYFailOnAlert,
> > > "exit with error code if any alert is written"
> > > ),
> >=20
> >=20
> > This patch introduces a new command-line option, -fail_on_alert, and a =
corresponding global flag LYFailOnAlert.
> >=20
> > The patch modifies HTAlert.c, LYGlobalDefs.h, and LYMain.c to track whe=
ther 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 EX=
IT_FAILURE regardless of the standard exit code.
> >=20
> > 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, f=
or example:
> >=20
> > 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>&-) > ...
> >=20
> > 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.
> >=20
> > I believe this is a useful addition for anyone using Lynx in automated =
environments or CI/CD pipelines.
> >=20
> >=20
>=20
> --=20
> Thomas E. Dickey <[email protected]>
> https://invisible-island.net
>