forum.wfido.ru

forum.wfido.ru (http://forum.wfido.ru/index.php)
-   RU.GOLDED (http://forum.wfido.ru/forumdisplay.php?f=77)
-   -   Борьба с псевдографикой (http://forum.wfido.ru/showthread.php?t=129316)

Vitaliy Aksyonov 17.03.2024 23:32

Борьба с псевдографикой
 
Vitaliy Aksyonov написал(а) к All в Mar 24 13:26:44 по местному времени:

Привет, 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

Vitaliy Aksyonov 18.03.2024 00:02

Re: Борьба с псевдографикой
 
Vitaliy Aksyonov написал(а) к All в Mar 24 13:48:18 по местному времени:

Привет, All!

17 Mar 24 13:26, я писал(а) тебе:


VA> По результатам долгих исследований, как же так получается, что у меня
VA> нормально выводится псевдографика, а у Нила нет, решил написать
VA> небольшую инструкцию, как сделать так, чтобы правильно отображались
VA> символы с кодами больше 127. То есть это национальные алфавиты и та
VA> самая псевдографика.

[...skipped...]

Ещё забыл важную вещь. Нужно обязательно проверить, что используется корректный тип терминала.
"echo $TERM" выдаст вам, что сейчас используется.

Он должен поддерживаться ncurses. Для проверки можно выполнить "infocmp" если выдаст длинную портянку - значит поддерживается. Если же напишет, что не найдена информация - надо доустановить нужные пакеты или попробовать сменить тип терминала.


Best regards,
Vitaliy Aksyonov.

... Работа на износ - ковыряние в носу.
--- GoldED+/LNX 1.1.5-b20240305-beta

Stas Mishchenkov 18.03.2024 10:31

Борьба с псевдографикой
 
Stas Mishchenkov написал(а) к Vitaliy Aksyonov в Mar 24 09:20:48 по местному времени:

Нi Vitaliy!

17 Mar 24 13:48, Vitaliy Aksyonov -> All:

VA> Он должен поддерживаться ncurses. Для проверки можно выполнить
VA> "infocmp" если выдаст длинную портянку - значит поддерживается. Если
VA> же напишет, что не найдена информация - надо доустановить нужные
VA> пакеты или попробовать сменить тип терминала.

[fido@brorabbit ~]$ infocmp
-bash: infocmp: команда не найдена


Нave nice nights.
Stas Mishchenkov.

--- Уборка, уборка - перейди на Егорку, стирка - на Ирку, а готовка на Вовку!

Cheslav Osanadze 18.03.2024 13:51

Борьба с псевдографикой
 
Cheslav Osanadze написал(а) к Stas Mishchenkov в Mar 24 11:46:38 по местному времени:

Привет Stas!

18 Мар 24 09:20, Stas Mishchenkov -> Vitaliy Aksyonov:

VA>> Он должен поддерживаться ncurses. Для проверки можно выполнить
VA>> "infocmp" если выдаст длинную портянку - значит поддерживается.
VA>> Если же напишет, что не найдена информация - надо доустановить
VA>> нужные пакеты или попробовать сменить тип терминала.

SM> [fido@brorabbit ~]$ infocmp
SM> -bash: infocmp: команда не найдена

Боюсь ошибиться...

apt-get install libncurses5-dbg


Cheslav.


... Мягким органам - твёрдая рука!
---

Vitaliy Aksyonov 18.03.2024 17:51

Re: Борьба с псевдографикой
 
Vitaliy Aksyonov написал(а) к Cheslav Osanadze в Mar 24 07:46:36 по местному времени:

Привет, Cheslav!

18 Mar 24 11:46, ты писал(а) Stas Mishchenkov:

VA>>> Он должен поддерживаться ncurses. Для проверки можно выполнить
VA>>> "infocmp" если выдаст длинную портянку - значит поддерживается.
VA>>> Если же напишет, что не найдена информация - надо доустановить
VA>>> нужные пакеты или попробовать сменить тип терминала.

SM>> [fido@brorabbit ~]$ infocmp
SM>> -bash: infocmp: команда не найдена

CO> Боюсь ошибиться...

CO> apt-get install libncurses5-dbg

ncurses-bin

А так-то я думаю человек сам сможет найти, в каком пакете его дистрибутива поставляется тот или иной бинарь. ;)

Best regards,
Vitaliy Aksyonov.

... Режим наибольшего благопрепятствования...
--- GoldED+/LNX 1.1.5-b20240305-beta

Cheslav Osanadze 18.03.2024 18:22

Борьба с псевдографикой
 
Cheslav Osanadze написал(а) к Vitaliy Aksyonov в Mar 24 16:10:56 по местному времени:

Привет Vitaliy!

18 Мар 24 07:46, Vitaliy Aksyonov -> Cheslav Osanadze:

VA>>>> Если же напишет, что не найдена информация - надо доустановить
VA>>>> нужные пакеты или попробовать сменить тип терминала.

SM>>> [fido@brorabbit ~]$ infocmp
SM>>> -bash: infocmp: команда не найдена

CO>> Боюсь ошибиться...

CO>> apt-get install libncurses5-dbg

VA> ncurses-bin

VA> А так-то я думаю человек сам сможет найти, в каком пакете его
VA> дистрибутива поставляется тот или иной бинарь. ;)

Я пошутил.:) Я вообще "не сварщик", но совет сохранил! Спасибо. Мало ли... А то, помню, как меня бесили вот эти символы, вместо нормальных прямых линий таблиц.


Cheslav.


... - Прораб! Скрипач не нужен!(с)Кдд
---

Stas Mishchenkov 19.03.2024 11:51

Борьба с псевдографикой
 
Stas Mishchenkov написал(а) к Vitaliy Aksyonov в Mar 24 10:34:56 по местному времени:

Нi Vitaliy!

18 Mar 24 07:46, Vitaliy Aksyonov -> Cheslav Osanadze:

SM>>> [fido@brorabbit ~]$ infocmp
SM>>> -bash: infocmp: команда не найдена

CO>> Боюсь ошибиться...

CO>> apt-get install libncurses5-dbg

VA> ncurses-bin

Тоже не угадал. ;)

VA> А так-то я думаю человек сам сможет найти, в каком пакете его
VA> дистрибутива поставляется тот или иной бинарь. ;)

Ага. Разобрался. ;)

Нave nice nights.
Stas Mishchenkov.

--- Это только от большого ума горе, а от маленького - так, легкая грусть.


Текущее время: 10:48. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot