强制man输出ANSI代码

时间:2015-04-20 17:05:01

标签: travis-ci man ansi-escape groff

我使用manman2html自动生成一些html文档,与man manpage | man2html一致。这很有效,除非我在Travis CI上运行它,man没有生成正确的转义序列以使标题和选项变为粗体。有没有办法强制man生成这些代码?

我还看了一下使用groffer --mode=tty代替man,它可以在我的Mac上运行,但在Linux上运行(即Travis CI),而不是生成{{1}的二进制ANSI代码可以读取,它生成纯文本代码,如man2html

2 个答案:

答案 0 :(得分:1)

有一些缺失的信息,但我会尝试填写:

  • 有多个名为man2html的程序。我相信你指的是我也使用的Perl脚本。 (我已经在scripts page上找到了一些改进,但这并没有改变这个问题。)
  • 相比之下,还有另一个程序(参见手册页),它希望格式化联机帮助页 - 与Perl脚本不同。
  • 前段时间,其中一位使用groff的开发人员添加了(误)功能,将nroff的默认行为更改为产品转义序列以获取颜色。对于彩色或粗体文字,这些类似于^[[34m^[[1m
  • 除此之外,其他人nroff产生的不是转义序列`而是退格序列,使用重击来模拟下划线或粗体文本(_ ^ HXX ^例如HX。
  • 并非所有人都喜欢groff功能(例如参见此mailing list comment)。
  • 可以通过设置环境变量groff来覆盖GROFF_NO_SGR功能,如grotty的手册页中所述。

除了转义序列退格序列的问题之外,如果您使用的编码为UTF-8的语言环境,groff可能会生成UTF-8。有几个地方值得注意:

  • 断字
  • 特殊字符,例如©(copyright)

man2html脚本对UTF-8等多字节编码一无所知,会做出意想不到的事情。解决方法是,通过设置这些环境变量,将语言环境设置覆盖到POSIX可以解决问题:

LANG=C
LC_ALL=C
LC_CTYPE=C
LANGUAGE=C

答案 1 :(得分:0)

我在我的代码中使用这个环境变量来生成man的改写代码,用于非交互式shell:

export MAN_KEEP_FORMATTING=1

答案就在这里How to run man with formatting in not interactive shell?