= Сообщение: 3514 из 3632 ======================================== RU.GOLDED = От : Vitaliy Aksyonov 1:104/117 17 Mar 24 13:26:44 Кому : All 17 Mar 24 13:26:44 Тема : Борьба с псевдографикой FGHI : area://RU.GOLDED?msgid=1:104/117+65f7442f = Кодировка сообщения определена как: CP866 ================================== Ответ: area://RU.GOLDED?msgid=1:104/117+65f7499f ============================================================================== Привет, All!
* Originally in ru.golded * Crossposted in pvt.luna.local
По результатам долгих исследований, как же так получается, что у меня нормально выводится псевдографика, а у Нила нет, решил написать небольшую инструкцию, как сделать так, чтобы правильно отображались символы с кодами больше 127. То есть это национальные алфавиты и та самая псевдографика.
Сразу оговорюсь, что это для линукса (скорее всего очень похоже и для MacOS), однобайтовых кодировок и локалей. Про юникод здесь нет ничего. Хотя я планирую разобраться, как можно выводить юникод с существующим кодом. Есть ненулевая вероятность, что это возможно.
Итак, если у вас есть проблемы с выводом псевдографики, или вообще проблемы с выводом неанглийских символов в GoldEd, надо проверить несколько вещей. Я буду приводить примеры с KOI8-R, но должно так же без проблем работать и с CP866, CP437, CP1125 и других однобайтовых кодировках.
Также моя инструкция подразумевает, что не используются никакие перекодировщики (вроде luit) или терминал мультиплексоры (screen, tmux).
1. Убедитесь, что ваш терминал использует правильную кодировку. Я пробовал и удаленный доступ через ssh (Putty) и локальную консоль (гномовский терминал). В обоих случаях я выбрал KOI8-R в качестве кодировки.
2. Попробуйте выполнить вот такой простой скрипт:
printf '%b' $(printf '\\%03o' {128..255})
Он должен выдать вам последовательность русских букв, символов псевдографики и несколько специальных символов. Если выводятся квадраты, знаки вопроса или другой бред - разбирайтесь с настроками терминала. Это кодировка и шрифт.
3. Очень важно, чтобы при запуске GoldEd была выбрана правильная локаль. В моём случае это ru_RU.koi8r. Может отличаться в зависимости от системы. Тут еще надо понимать, что совсем необязательно менять локаль для всей системы. Локаль - это свойство процесса и можно просто запустить GoldEd в локали, отличной от системной. Что я и делаю вот так:
LANG=ru_RU.koi8r gedlnx -C<path to my config>
Также обязательно проверьте, что такая локаль в системе вообще есть. Узнать это можно, выполнив команду locale -a. Если нужной локали в вашей системе нет - читайте документацию к дистрибутиву, как доставить или сгенерировать нужные локали.
Этого должно быть достаточно, чтобы псевдографика отлично показывалась.
В чём же проблема, когда выбрана "неправильная" локаль. Дело в том, что ncurses (библиотека, которую GoldEd использует для вывода текста) пытается определить, является ли каждый выводимый символ "печатаемым". И делает это с помощью функций isprint и iscntrl. Так вот, когда локаль не соответствует выводимому тексту, то символы псевдографики распознаются как непечатные. В этом случае ncurses конвертирует их с помощью специальной таблицы в последовательности вроде M~D, где первый символ - это Ctrl, Alt, а дальше английская буква.
Еще несколько моментов. У меня нормально завелась связка с запуском GoldEd через luit. Но я предпочитаю запускать его напрямую.
Надеюсь, что эта инструкция поможет кому-то ещё. Ну и для себя прикопаю на будущее.
Best regards, Vitaliy Aksyonov.
... Я больше не пью... И меньше тоже! --- GoldED+/LNX 1.1.5-b20240305-beta * Origin: Aurora, Colorado (1:104/117)