在检查的源代码时less
,我注意到随附的手册页(less.man
)使用了终端转义代码来显示粗体文本:
^[[1mNAME^[[0m
less - opposite of more
^[[1mSYNOPSIS^[[0m
^[[1mless -?^[[0m
^[[1mless --help^[[0m
^[[1mless -V^[[0m
^[[1mless --version^[[0m
^[[1mless [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]^[[0m
用于生成的命令显然是nroff -man
:
$ head Makefile.aut
# Makefile for authoring less.
EMAIL = [email protected]
HOMEPAGE = http://www.greenwoodsoftware.com/less
SHELL = /bin/sh
RCS = rcs
NROFF = nroff -man
但是,如果我运行nroff -man less.nro
,我将使用退格键获得(通常的)联机帮助页输出:
N^HNA^HAM^HME^HE
less - opposite of more
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
l^Hle^Hes^Hss^Hs -^H-?^H?
l^Hle^Hes^Hss^Hs -^H--^H-h^Hhe^Hel^Hlp^Hp
l^Hle^Hes^Hss^Hs -^H-V^HV
l^Hle^Hes^Hss^Hs -^H--^H-v^Hve^Her^Hrs^Hsi^Hio^Hon^Hn
如何生成第一个表格?
“第一种形式”是的...功能groff
。如果您的“ nroff”不是的包装器groff
,那么您只会看到第二种形式。
手册页中提供了该功能grotty
(类打字机设备的groff驱动程序):
默认情况下,grotty发出SGR转义序列(来自ISO 6429,也称为ANSI颜色转义)以更改文本属性(粗体,斜体,颜色)。这样就可以有八种不同的背景底色和前景色。另外,粗体和斜体属性可用于在同一时间(通过使用BI字体)。
在实践中,它不能很好地工作,例如,在此处查看如何错误渲染相同的注释(对这些序列进行后处理):
默认情况下,grotty发出SGR转义序列(来自ISO 6429,也称为ANSI颜色转义)以更改文本属性(粗体,斜体,颜色)。这样就可以有八种不同的M [green] backgroundM []和m [red] foregroundm []颜色;此外,可以同时使用[ BI](使用BI字体)使用粗体和斜体属性。
因此,一些开发人员选择不使用它(例如,来自Emacs邮件列表的讨论)。
但是,正如手册页中所说的“默认”。因此,如果您有groff,那么它应该产生那些转义序列。
打包程序可以应用补丁来修改程序。@muru的评论提到了Debian中的版本(请参见错误报告和软件包页面)。软件包changelog表示:
-- Colin Watson <[email protected]> Sat, 27 Jul 2002 18:41:46 +0100
groff (1.18-1) unstable; urgency=low
* Disable the new ANSI colour/bold/underline escapes in nroff mode,
because most pagers either fail to cope with it or need special options
to do so. It can be re-enabled by editing /etc/groff/man.local and
/etc/groff/mdoc.local, or by setting the environment variable GROFF_SGR
to something non-empty.
但是,groff的来源没有提及GROFF_SGR
。它仅引用GROFF_NO_SGR
:
./NEWS:1108: for the GROFF_NO_SGR environment variable also.
./NEWS:1450:o If the environment variable GROFF_NO_SGR is set, SGR output is disa...
./PROBLEMS:33: 1. Set the GROFF_NO_SGR environment variable.
./doc/webpage.ms:1920:. URL #GROFF_NO_SGR GROFF_NO_SGR
./doc/webpagewebpage.ms:1922:. nop GROFF_NO_SGR
./doc/webpagewebpage.ms:2437:.TAG GROFF_NO_SGR
./doc/webpagewebpage.ms:2439:If the environment variable GROFF_NO_SGR is set, SGR output is
./src/devices/grotty/grotty.man:126:.B GROFF_NO_SGR
./src/devices/grotty/grotty.man:394:.B GROFF_NO_SGR
./src/devices/grotty/tty.cpp:864: if (getenv("GROFF_NO_SGR"))
而更改日志(ChangeLog.118)没有任何提示:
2002-02-12 Werner LEMBERG <[email protected]>
* src/libs/libgroff/Makefile.sub (snprintf.o): Don't use
$(COMPILE.c) to not include groff's assert.h.
* src/drivers/grotty/tty.cc (main): Add GROFF_NO_SGR environment
variable.
* NEWS, src/drivers/grotty/grotty.man: Document it.
设置GROFF_NO_SGR
不会给出SGR序列(联机帮助页正确)。Debian changelog注释从中引用了这一块/etc/groff/man.local
,Debian在其中添加了对GROFF_SGR
变量的检查:
. \" Debian: Disable the use of SGR (ANSI colour) escape sequences by
. \" grotty.
. if '\V[GROFF_SGR]'' \
. output x X tty: sgr 0
并设置环境变量确实会使它生成用于粗体等的SGR序列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句