Заставить человека выводить коды 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 с форматированием в неинтерактивной оболочке?

Другие вопросы по тегам