如何使用粗体等的转义码生成手册页?

muru

在检查的源代码时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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在手册页中转义新行

来自分类Dev

手册页中粗体部分的颜色

来自分类Dev

手册页:如何使用参数

来自分类Dev

如何避免make生成和安装手册页?

来自分类Dev

可以使用pydoc来生成手册页吗?

来自分类Dev

如何安装手册页?

来自分类Dev

如何安装手册页?

来自分类Dev

如何搜索手册页?

来自分类Dev

如何使用make构建多个手册页?

来自分类Dev

如何使用 grep 在手册页中搜索选项?

来自分类Dev

如何确定在Ubuntu手册站点上使用哪个手册页?

来自分类Dev

如何确定在Ubuntu手册站点上使用哪个手册页?

来自分类Dev

如何阅读Linux手册页?

来自分类Dev

如何直接显示手册页?

来自分类Dev

如何转储手册页?

来自分类Dev

Solaris如何找到手册页?

来自分类Dev

如何阅读git revert的手册页?

来自分类Dev

如何阅读此tcpdump手册页?

来自分类Dev

如何grep手册页中的文本?

来自分类Dev

如何安装“ htop”手册页?

来自分类Dev

如何更改手册页的背景颜色?

来自分类Dev

如何阅读我的母语的手册页?

来自分类Dev

删除手册页后如何重新安装手册页

来自分类Dev

将Vim用作手册页时,如何防止手册页名称被截断?

来自分类Dev

如何使用手册页来学习如何使用命令?

来自分类Dev

如何手动安装手册页文件?

来自分类Dev

在使用less命令的同时或在手册页中如何执行Linux命令?

来自分类Dev

如何有效地使用手册页?

来自分类Dev

如何在不使用groff的情况下将Linux手册页转换为HTML?