Re: [PATCH] Add %F expando to $message_id_format to use from address.

Alejandro Colomar via Mutt-dev <[email protected]> Tue, 4 Aug 2026 13:13:47 +0200
Newsgroups gmane.mail.mutt.devel
Message-ID <anHI592GYSPfpZPS@devuan>
--uudrmdwczoz2zqkv
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
From: Alejandro Colomar <[email protected]>
To: [email protected]
Subject: Re: [PATCH] Add %F expando to $message_id_format to use from address.
Message-ID: <anHI592GYSPfpZPS@devuan>
References: <[email protected]>
 <anB0GFYGkcA1CMT4@devuan>
 <[email protected]>
MIME-Version: 1.0
In-Reply-To: <[email protected]>

Hi Kevin,

> Date: 2026-08-04 12:38:46+0800
> From: "Kevin J. McCarthy" <[email protected]>
>
[...]
> > 	#define CTYPE_LOWER_C          "abcdefghijklmnopqrstuvwxyz"
> > 	#define CTYPE_UPPER_C          "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
> > 	#define CTYPE_DIGIT_C          "0123456789"
> > 	#define CTYPE_ALPHA_C          CTYPE_LOWER_C CTYPE_UPPER_C
> > 	#define CTYPE_ALNUM_C          CTYPE_ALPHA_C CTYPE_DIGIT_C
> > 	#define CTYPE_PFCHAR_C         CTYPE_ALNUM_C "._-"  // portable filena=
me character set
>=20
> Thanks Alex.  I'll add a pre-patch with this to the series and send it out
> later today for feedback.

You're welcome!  :)

[...]
> > > +  while (*from)
> > > +  {
> > > +    if (*from =3D=3D '@' && !has_at)
> > > +      has_at =3D 1;
> > > +    else if (!strchr(ALLOWED_FROM_CHARS, *from))
> >=20
> > And then here I suggest adding another API, inspired by isascii(3):
> >=20
> > 	// isascii_c - is [:ascii:] C-locale
> > 	#define ispfchar_c(c)  (!streq(strchrnul(CTYPE_PFCHAR_C, c), ""))
> >=20
> > 	#define streq(s1, s2)  (!strcmp(s1, s2))
> >=20
> > To be able to write it as
> >=20
> > 	else if (!ispfchar_c(*from))
>=20
> I remember the earlier discussion on mutt-dev about this.  I'm going to h=
old
> off on this suggestion, as I remember strchrnul() is not standardized, and
> the fallback suggestions relied on non-standard ?: operators, etc.

Hmmm, you could provide a fallback implementation of strchrnul(3) for
systems that lack it:

	char *
	strchrnul(const char *s, int c)
	{
		char  reject[2] =3D {c, '\0'};

		return s + strcspn(s, reject);
	}

> The nul's are explicitly checked for in this case, so I don't think it's
> worth it to dig into that for this case.  (But of course I'll swap out to
> use CTYPE_PFCHAR_C)

Sounds reasonable.

> > > +      *from =3D '_';
> > > +    from++;
> > > +  }
> > > +}
> >=20
> > In any case, the above seems okay.
>=20
> Thanks again!


Have a lovely day!
Alex

--=20
<https://www.alejandro-colomar.es>

--uudrmdwczoz2zqkv
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEES7Jt9u9GbmlWADAi64mZXMKQwqkFAmpxyWYACgkQ64mZXMKQ
wqkNsxAAvG2TtcJ5FUjDpfdddEaBeKZ6X9uq0s7ai5w4z9B7Y7ihYNW8GeL1BLg+
Gzf8P40jBiJaA8YHPBxS/946wId2Y0MvjKYvggNOsN0DBVZEjOnL3WkfWKOI+UpP
/dbX0c07LNw3gMIoc5Ydc3D8+1ixmpGgRbGkk64JCkIbg5WRvz2ge2CLU7rtvKTV
66uc5+QmIFQe34ul65XtHt+Q7QnnLhivWL/r/InEnn4B2CmRsZD5z4ScUb5+ecQQ
QPfDnQ3sa9j08B1rLTjD591x9+89HVvAs92JsEzMVcUikoYFkhJc9pOP3IzA47BZ
As1+HUqk1CBW9AjWfRVQ3ZKgeTVl/iR1CMbDzBtnV7ZHdNrXfduJ+uvzFPXbfsF1
bRrKRpJzqayDMXqK+yIJBbN5pvGqNnpMUq8hYV/S+6vPiXwO4UePcgl0FgmWJzHP
NG4rhSYDx5cNqcRpuk+rDRlXNlCdf9rtf+M/Lv0XsYLyzS2SrOejLzU4b8J1W7M/
ivrqIw1N/1Ce5p3ILya0xL7338L7brSbQVZy51oHSwklaHEgC+WVUb2vjDJJyPyN
t8LB6BrTQBjs7CUG9G26l5RMjRJdA3TEmN/Z3SYdVkGYJwux4Skhxda8M1qAzFmV
3FLaJJ4mxlMPBNPoBFI9s6/zt5TEWrIwshQni1365byIjX/1cpI=
=YFPV
-----END PGP SIGNATURE-----

--uudrmdwczoz2zqkv--