Gregory | Дата: Пт, 17.05.2013, 16:07 | Сообщение # 16 |
Генерал-майор
Группа: Доверенные
Сообщений: 482
Статус: Offline
| Есть предложение доработать mc, устранив проблемы перечисленные в посте #14. Я знаю, что нужно исправлять, но моих знаний C недостаточно, чтобы сделать это по-человечески, поэтому любая помощь приветствуется. Самое существенное место, требующее изменения - это sldisplay.c в slang. Там во многих местах hardcoded "[", а это ограничивает mc кодовой страницей 1047, а следовательно, не позволяет вводить и отображать национальные символы, в частности, кириллицу. Речь идет о местах вида Код #ifdef __MVS__ static char *Color_Escape_Sequence = ESC_STR "[3%dm" ESC_STR "[4%dm"; #else static char *Color_Escape_Sequence = "\033[3%d;4%dm"; #endif как вариант, чтобы избавится от 1047-зависимости, можно оставлять такие места "как есть", но ниже, в SLtt_get_terminfo() добавить следующее: Код #ifdef __MVS__ for (i = 0; i <= strlen(Color_Escape_Sequence); i++) { if (Color_Escape_Sequence [i]== square_brake[0]) Color_Escape_Sequence = Cls_Str[1]; } #endif[/i] здесь символ "[" = 'AD'x заменяется на код "[", взятый из элемента clear terminfo. Естественно, описания terminfo для 1047 и других кодовых страниц должны быть разные, но они в любом случае должны быть разными: Код xterm|xterm-1047 ... clear=\E[H\E[2J
xterm1025|xterm-1025 ... clear=\E?H\E?2J код символа "[" в 1047 'AD'x, в традиционных кодовых страницах (500, 1025, ..) x'4A'x
проблема в том, что мест, подобных приведенному выше, в sldisply.c порядочно, и надо бы какую-то функцию замены сочинить, но это выше моих сил)
Кстати, и с ESC можно бьло бы точно так же поступить - не заменять один хардкод на другой, а вытащить его из terminfo...
Предлагаемый вариант не является единственно возможным, вполне могут быть и другие решения.
Общая формулировка проблемы: 1) зависимость от ASCII (это касается ESC); 2) зависимость от конкретного варианта EBCDIC - 1047 (это касается [).Добавлено (17.05.2013, 16:07) --------------------------------------------- лирическое отступление aka хотели как лучше, а получилось как всегда цитирую комментарий из sldisply.c Цитата /* Believe it or not, this is what is in the linux terminfo database. It * produces the same escape sequence but it is much more CPU intensive. * Why not just encode it as "\033[3%p1%dm\033[4%p2%dm" ??? */ вот если бы не подобные "улучшения" , то проблем было бы намного меньше.
Сообщение отредактировал Gregory - Пт, 17.05.2013, 15:53 |
|
| |
Gregory | Дата: Вт, 02.06.2015, 13:08 | Сообщение # 17 |
Генерал-майор
Группа: Доверенные
Сообщений: 482
Статус: Offline
| Подниму тему - есть новости :-)
Уже почти два года я пользуюсь версией MC 4.1.40, портацию которой начал я, а завершил Vitezslav Vit Vlcek. И вот совсем недавно я обнаружил, что Rocket Software портировала mc 4.6! Для получения доступа необходимо лишь заполнить форму.
Хочу обратить внимание, что специалисты Rocket Software не искали простых путей, как это сделал я, взяв за основу достаточно старую и не развивающуюся версию mc, а портировали glib, что позволило им собрать достаточно актуальную версию mc.
Сообщение отредактировал Gregory - Вт, 02.06.2015, 13:14 |
|
| |