[PATCH 22/42] find.1: access “ and ” portably

"G. Branden Robinson" <[email protected]> Tue, 18 Nov 2025 21:47:23 -0600
Newsgroups gmane.comp.gnu.findutils.bugs
Message-ID <20251119034723.q2ztuwmufpmbvduc@illithid>
The `\(lq` and `\(rq` and special character escape sequences are not
universally portable.

Traditionally, AT&T troff did not bother to identify these special
characters at all; it was apparently felt that adjacently setting
directional single quotes sufficed.  You can discern this fact in
materials typeset by AT&T troff by observing what one might call
generous kerning of these glyphs when used as "double" quotes.

However, someone at the Berkeley CSRG had a brainwave, and for 4BSD in
1980, added strings named `lq` and `rq` to the man(7) package so that
man pages could access double quotes by whatever means the underlying
implementation had for realizing them.  This excellent idea made it into
Unix System V (1988/9), so that every surviving troff implementation
known to me, including DWB and Solaris 10, supports them--save one.  The
exception is Plan 9.  Fortunately, the Plan 9 from User Space
("plan9port") project accepted a patch from me on 10 October to add
support there as well.[1]

Like the \*" string, \*(lq and \*(rq should not be used in quoted macro
arguments if one desires portability to AT&T troff-descended formatters
(other than Heirloom Doctools troff); if the implementation defines
these strings such that their interpolations contain `"`, undesired
output is the likely result.

[1] https://github.com/9fans/plan9port/pull/735
---
 find/find.1 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/find/find.1 b/find/find.1
index ccec8cd3..199f5240 100644
--- a/find/find.1
+++ b/find/find.1
@@ -2795,7 +2795,7 @@ .SS "Operator precedence surprises"
 and when there is no operator specified between tests,
 .B \-a
 is assumed.
-.SS "\(lqpaths must precede expression\(rq error message"
+.SS "\*(lqpaths must precede expression\*(rq error message"
 .nf
 .B $ find .\& \-name *.c \-print
 find: paths must precede expression
-- 
2.30.2
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEh3PWHWjjDgcrENwa0Z6cfXEmbc4FAmkdPcoACgkQ0Z6cfXEm
bc7qvA/8DhfToQ3Fssw/iMwieZW4rA/Ud1DuK0hB775pMCfHZwEEq+QgHQqaSnEW
Cmu0QK7trQ2H7waLQ4WblAfLyDZKK+Nhu/Z6RIBp1Pi1Fz0mJNWCf7FYUaJStUsR
e+EOIYPdfbTWQHrK5LvfT9RWkHoOHFPKgEw/dABLIOVzah6eXj0DT3eEVPXA3yCZ
Lq9MrQ640vOF1A/Yj5mOAQKIr3PaTegaRaKDkAKSr1mKvXXi8QIpYShqwXMJnjTm
+JNnpNrFzPh5PKm12E9PbkRzY4y//5E1jVrf9Ip4zOmPlH0GUUPkIWHSN9xB+nb4
d5yyp5bIiPFfVKAhNn2JGtuOFzKAK0w85skrhVcv/mXli5JQvI7vaxT3lrH7wLJh
zW+PjM3Rncfc8/WyvTv01B5pcFeM8AQdZO3i+E8y6MxJD96AVEL0UK9UOkSy+iry
qS3vcWO3VP6DdpxpIZRZ8aY/dDR5N/TYDqGc7/ZVGv0EBKLEqYRpM7ComHt33S42
/0gGVomIgQXd14zhVeUy2htkF4MdEgvAtJxudpePqZYpGv4UYsDj4xhGZ1SD+xtV
uP7S+li1Pfp63TzSi8tkPyNfX3uIvZhHqb2/Kdl9boq7KvXuGmIMnqqaReuilLRA
n87p81qSlQToQ4GTVWSPqXT3jKhZHU9ems0iSwNpWexi1DX3N38=
=dWTx
-----END PGP SIGNATURE-----