Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Oct 2002 12:50:26 +0300
From:      Ruslan Ermilov <ru@FreeBSD.ORG>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        arch@FreeBSD.ORG
Subject:   Re: color, again, in grotty
Message-ID:  <20021018095026.GA3386@sunbay.com>
In-Reply-To: <20021017.101833.110719994.imp@bsdimp.com>
References:  <20021017.101833.110719994.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--98e8jtXdkpgskNou
Content-Type: multipart/mixed; boundary="HcAYCG3uE/tztfnV"
Content-Disposition: inline


--HcAYCG3uE/tztfnV
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

[Before I start my speech: I have disabled the SGR support in grotty(1)
completely until we get the resolution here.  This does not of course
affect the non-TTY groff(1) devices like -Tps, -TX100, etc.]

On Thu, Oct 17, 2002 at 10:18:33AM -0600, M. Warner Losh wrote:
> OK.  Something is really broken with the latest groff.
>=20
> nroff -mandoc devd.8 | more
> UNTITLED                             LOCAL                            UNT=
ITLED
>=20
> ESC[1mNAMEESC[0m
>      ESC[1mdevd ESC[22m- Device state change daemon
>=20
>=20
> etc
>=20
> Notice that it now bogusly and wrongly contains escape characters.
> This is wrong wrong wrong and must be fixed.  Color is cool, but
> putting it in nroff is absolutely the worst and wrongest place one can
> put it.  Why is it done this way?  Can't it be fixed?
>=20
This is only one opinion, and there exist others I would like you
to listen to before judging:

http://people.freebsd.org/~ru/grotty-SGR.mbox.gz (25 messages thread)

Only a few quotes in support of colors, if you permit:

: > Well, if the SGR escapes are on by default, I'd think you do need to
: > consider the effects that will have on popular terminals.  AFAIK,
: > even the majority of xterm versions don't support colors, outside
: > the GNU/Linux world.
:=20
: The eternal question whether we shall follow a standard or not...
: ISO 6429 is from 1991 -- isn't eleven years enough to wait?
:=20
: > Didn't you say that you also use SGR for bold and underline?  That
: > would produce similar problems for terminals whose bold and
: > underline commands are not SGR, right?
:=20
: Do you think there are terminals which have SGR sequences for
: activating colors and non-SGR sequences for activating bold and
: underline?

If you read the thread, I am pretty sure you will get the same feeling
as I am -- it is that the new ANSI SGR escapes became the new standard
for TTY-type output devices serviced with grotty(1), and nroff(1).
Our default pager (less/more) also supports this feature through the
-R option, as does the new -R option in the new info(1).

We have also learned one pitfall with this new approach.  Our default
terminal driver, syscons(4), renders the "underscore" attribute, SGR
E[4m (see screen(4)), the same as bold, which is the (code documented)
bug, so using this new SGR scheme directly as it comes with new Groff
worsens the output on cons25* type terminals.  On the other hand,
classical nroff(1) filters like ul(1) (and not by accident less(1))
render underlining with the "reverse" attribute on terminals that do
not support underlining, like cons25.  So we must either fix syscons(4)
or to somehow tell grotty(1) to emit old sequences to print bold and
italic characters.  I have prepared and sent the patch to Groff
maintainers that tells grotty(1) to use the old scheme for printing
bold and italic characters, but otherwise have color output enabled.
Today I have tried a different approach ("fixing" the driver), and
was surprised by the unexpected good results -- I have changed the
syscons(4) so that it renders "underscore" with "reverse", and I
can now differentiate all three bold (bold attr), italic (underline
attr), and bold+italic (bold+underline attrs) fonts (and colors!)
on a cons25 TTY.

There are three ways we can go here:

1.  Disable SGR support for grotty(1).

    It can be soft-disabled by setting GROFF_NO_SGR in environment,
    or hard-disabled system-wide (like it is now in -CURRENT as of
    this writing) in /usr/share/tmac/troffrc.

2.  Stay compatible with the new standard (11 years old ANSI std).
    This means we fix syscons(4) so that it renders "underscore"
    distinguishable from "bold", and change the default pager to
    "more -R".  There will still be an option of soft-disabling
    it for those who want it disabled.

I suggest option 2 for 5.0-CURRENT and soft option 1 (soft version)
for 4.7-STABLE (once I import the new Groff into RELENG_4).

Patch for option 2 is included.  Soft option 1 would also require
modifying src/etc/login.conf to add GROFF_NO_SGR to environment.


Cheers,
--=20
Ruslan Ermilov		Sysadmin and DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age

--HcAYCG3uE/tztfnV
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=p
Content-Transfer-Encoding: quoted-printable

Index: sys/dev/syscons/scterm-sc.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/sys/dev/syscons/scterm-sc.c,v
retrieving revision 1.17
diff -u -r1.17 scterm-sc.c
--- sys/dev/syscons/scterm-sc.c	12 Sep 2001 08:37:13 -0000	1.17
+++ sys/dev/syscons/scterm-sc.c	18 Oct 2002 09:50:24 -0000
@@ -797,7 +797,8 @@
 {
 	int attr, mask =3D tcp->attr_mask;
=20
-	if (mask & REVERSE_ATTR) {
+	/* XXX: underline mapping for Hercules adapter can be better */
+	if (mask & (REVERSE_ATTR | UNDERLINE_ATTR)) {
 		attr =3D ((mask & FG_CHANGED) ?
 			tcp->cur_color.bg : tcp->rev_color.fg) |
 			(((mask & BG_CHANGED) ?
@@ -805,8 +806,7 @@
 	} else
 		attr =3D tcp->cur_color.fg | (tcp->cur_color.bg << 4);
=20
-	/* XXX: underline mapping for Hercules adapter can be better */
-	if (mask & (BOLD_ATTR | UNDERLINE_ATTR))
+	if (mask & BOLD_ATTR)
 		attr ^=3D 0x08;
 	if (mask & BLINK_ATTR)
 		attr ^=3D 0x80;
Index: contrib/groff/tmac/troffrc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/contrib/groff/tmac/troffrc,v
retrieving revision 1.11
diff -u -r1.11 troffrc
--- contrib/groff/tmac/troffrc	18 Oct 2002 09:10:44 -0000	1.11
+++ contrib/groff/tmac/troffrc	18 Oct 2002 09:50:24 -0000
@@ -45,7 +45,4 @@
 .
 .\}
 .
-.\" Disable SGR support in grotty(1).
-.if n .do nop \X'tty: sgr 0'\c
-.
 .\" Don't let blank lines creep in here.
Index: etc/root/dot.cshrc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/etc/root/dot.cshrc,v
retrieving revision 1.28
diff -u -r1.28 dot.cshrc
--- etc/root/dot.cshrc	10 Jan 2001 02:37:16 -0000	1.28
+++ etc/root/dot.cshrc	18 Oct 2002 09:50:19 -0000
@@ -17,7 +17,7 @@
 set path =3D (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /us=
r/local/bin /usr/X11R6/bin $HOME/bin)
=20
 setenv	EDITOR	vi
-setenv	PAGER	more
+setenv	PAGER	"more -R"
 setenv	BLOCKSIZE	K
=20
 if ($?prompt) then
Index: etc/root/dot.profile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/etc/root/dot.profile,v
retrieving revision 1.20
diff -u -r1.20 dot.profile
--- etc/root/dot.profile	27 Aug 1999 23:24:09 -0000	1.20
+++ etc/root/dot.profile	18 Oct 2002 09:50:19 -0000
@@ -6,5 +6,5 @@
 export HOME
 TERM=3D${TERM:-cons25}
 export TERM
-PAGER=3Dmore
+PAGER=3D"more -R"
 export PAGER
Index: share/skel/dot.cshrc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/share/skel/dot.cshrc,v
retrieving revision 1.13
diff -u -r1.13 dot.cshrc
--- share/skel/dot.cshrc	10 Jan 2001 17:35:28 -0000	1.13
+++ share/skel/dot.cshrc	18 Oct 2002 09:50:19 -0000
@@ -17,7 +17,7 @@
 set path =3D (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /us=
r/local/bin /usr/X11R6/bin $HOME/bin)
=20
 setenv	EDITOR	vi
-setenv	PAGER	more
+setenv	PAGER	"more -R"
 setenv	BLOCKSIZE	K
=20
 if ($?prompt) then
Index: share/skel/dot.profile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/share/skel/dot.profile,v
retrieving revision 1.21
diff -u -r1.21 dot.profile
--- share/skel/dot.profile	7 Jul 2002 00:00:54 -0000	1.21
+++ share/skel/dot.profile	18 Oct 2002 09:50:19 -0000
@@ -16,7 +16,7 @@
=20
 BLOCKSIZE=3DK;	export BLOCKSIZE
 EDITOR=3Dvi;   	export EDITOR
-PAGER=3Dmore;  	export PAGER
+PAGER=3D"more -R";	export PAGER
=20
 # set ENV to a file invoked each time sh is started for interactive use.
 ENV=3D$HOME/.shrc; export ENV

--HcAYCG3uE/tztfnV--

--98e8jtXdkpgskNou
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (FreeBSD)

iD8DBQE9r9liUkv4P6juNwoRAgobAKCCAjApHRxBOMYXV5eFs+4EeU91/QCfb7Zk
DULnn6uPbtohd0OR5r8k+cM=
=nNDK
-----END PGP SIGNATURE-----

--98e8jtXdkpgskNou--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021018095026.GA3386>