LINUX.ORG.RU

Исправление отображения символа списка в man'ах в системе с локалью KOI8-R


0

0

Сразу уточню, что речь идет о дистрибутиве Gentoo GNU/Linux с groff версии 1.19.1-r2, но описываемая проблема касается и пользователей большинства других дистрибутивов. Проблема заключается в том, что в системах с локалью KOI8-R, символы списка в man страницах отображаются некрасиво. Проверить это можно набрав man bash и осуществив поиск по регулярному выражению "^RESTRICTED SHELL". В этой секции man'а полно символов списка, которые в системе с локалью KOI8-R выглядят как псевдографическая буква "T", символ с кодом 0xB7. Весь смысл проблемы в том, что обычно вывод groff производится в кодировке ISO 8859-1, опция -Tlatin1 в /etc/man.conf. В кодировке ISO 8859-1 символ с кодом 0xB7 это "MIDDLE DOT", выглядящий как маленькая буква "o"; но в кодировке KOI8-R, которая используется на большинстве российских *nix систем, символ с кодом 0xB7 это псевдографический символ, похожий на букву "T" и списки из-за этого выглядят некрасиво. Для решения проблемы есть несколько способов:

1) Поменять в /etc/man.conf -Tlatin1 на -Tascii, после этого символы списков будут отображаться как "o", но этот способ не годится, если в системе есть кириллические man-страницы, так как используются только 7 бит. Также по этой же причине не будут нормально отображаться man страницы с интернациональными таблицами кодировки, такие как man koi8-r.

2) Способ, который использую я: в файле конфигурации шелла прописать export MANPAGER="/bin/tr '\267' o|${PAGER:-/usr/bin/less}". В этом способе перед тем, как передать обработанный текст man страницы пэйджеру less, tr заменяет все символы с кодом 0xB7 на символ "o". Преимущество в том, что теперь вместе с правильным символом списка нормально отображаются и кириллические man страницы. Недостаток в том, что в интернациональных таблицах кодировок, таких как man koi8-r, символ с кодом B7 тоже будет заменен на "o", в результате чего таблица выглядит неверно.

3) Переехать на системную кодировку UTF-8, автоматически решив данную проблему и создав много новых с приложениями, которые до сих пор нормально не поддерживают Юникод, такие как mc (не особо и нужен!), zsh (наоборот программа первостепенной необходимости), все графические приложения GTK1 (из которых, например, xmms с множеством существующих для него плагинов ничем не заменить).

4) Написать патч к groff, добавляющий кодировку -Tkoi8-r, а также попытаться протащить его в официальную дистрибьюцию groff'а. Если протащить патч в апстрим не удастся, то для каждой новой вышедшей версии groff'а дорабатывать написанный патч и пересобирать groff из исходников с этим патчем. Вроде бы, в дистрибутиве SuSE для решения описанной проблемы используется именно патч.

5) Другие способы, неизвестные автору поста?

Интересно было бы услышать соображения многоуважаемого all по поводу оптимального решения этой досадной проблемы.

export PAGER=most - символ вообще не отображается, зато маны цветные Ж)
export PAGER=less - символ выглядит как "o"

Локаль koi8-r.

W98
()
Ответ на: комментарий от W98

W98: а какой дистрибутив и его версия? Какая версия groff'а? Судя по всему он у тебя пропатчен, не мог бы ты посмотреть, что на него наложены за патчи? Еще скажи пожалуйста, в /etc/man.conf у тебя -Tlatin1, -Tascii или -Tчто-то_еще?

gentoosiast
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.