Заставить человека выводить коды ANSI
Я использую man
вместе с man2html
автоматически генерировать HTML-документацию в соответствии с man manpage | man2html
, Это работает хорошо, за исключением случаев, когда я запускаю его на Travis CI, man
не генерирует правильные escape-последовательности для выделения жирным шрифтом заголовков и параметров. Есть ли способ заставить man
генерировать эти коды?
Я также взглянул на использование groffer --mode=tty
вместо man
, который работает на моем Mac, но в Linux (т.е. Travis CI), вместо генерации двоичных кодов ANSI, которые man2html
может читать, он генерирует текстовые коды, как [1m
,
2 ответа
Некоторая недостающая информация, но я постараюсь заполнить ее:
- существует более одной программы
man2html
, Я полагаю, что вы имеете в виду скрипт Perl, который я тоже использую. (Я сделал некоторые улучшения, которые вы можете найти на моей странице скриптов, но это не меняет проблему). - для сравнения, есть другая программа (см. страницу руководства), которая ожидает отформатировать саму страницу руководства - в отличие от сценария Perl.
- Некоторое время назад, один из разработчиков, работающих с
groff
добавлена (неправильная) функция, изменяющая поведение по умолчаниюnroff
к продукту escape-последовательности для цветов. Это было бы что-то вроде^[[34m
или же^[[1m
, для цветного или жирного текста. - кроме этого, все остальные
nroff
генерирует не escape-последовательности `, а backspace-последовательности, используя переопределение для имитации подчеркивания или полужирного текста (например, _^HXX^HX). - не всем нравится
groff
особенность (см., например, этот список рассылки). -
groff
функция может быть переопределена путем установки переменной средыGROFF_NO_SGR
, как отмечено на странице руководства дляgrotty
,
Помимо проблемы с escape-последовательностями и последовательностями Backspace, groff
может генерировать UTF-8, если вы используете локаль с кодировкой UTF-8. Есть несколько мест, где это заметно:
- перенос
- специальные символы, такие как © (авторское право)
- таблицы
man2html
Скрипт ничего не знает о многобайтовых кодировках, таких как UTF-8, и будет делать неожиданные вещи. В качестве обходного пути, переопределение настроек языкового стандарта для POSIX устраняет проблему, устанавливая следующие переменные среды:
LANG=C
LC_ALL=C
LC_CTYPE=C
LANGUAGE=C
Я использую эту переменную окружения в своем коде, чтобы генерировать коды с типизацией от man для неинтерактивной оболочки:
export MAN_KEEP_FORMATTING=1
Ответ был здесь Как запустить man с форматированием в неинтерактивной оболочке?