Вт, 26.11.2024, 08:54
Приветствую Вас Гость | RSS
Главная | z/Midnight Commander - Страница 2 - Форум | Регистрация | Вход
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
z/Midnight Commander
GregoryДата: Пт, 17.05.2013, 16:07 | Сообщение # 16
Генерал-майор
Группа: Доверенные
Сообщений: 482
Репутация: 22
Статус: 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 хотели как лучше, а получилось как всегда smile
цитирую комментарий из 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" ???
 */
вот если бы не подобные "улучшения" no , то проблем было бы намного меньше. prof


Сообщение отредактировал Gregory - Пт, 17.05.2013, 15:53
 
GregoryДата: Вт, 02.06.2015, 13:08 | Сообщение # 17
Генерал-майор
Группа: Доверенные
Сообщений: 482
Репутация: 22
Статус: Offline
Подниму тему - есть новости :-)

Уже почти два года я пользуюсь версией MC 4.1.40, портацию которой начал я, а завершил Vitezslav Vit Vlcek. И вот совсем недавно я обнаружил, что Rocket Software портировала mc 4.6! Для получения доступа необходимо лишь заполнить форму. respect

Хочу обратить внимание, что специалисты Rocket Software не искали простых путей, как это сделал я, взяв за основу достаточно старую и не развивающуюся версию mc, а портировали glib, что позволило им собрать достаточно актуальную версию mc.


Сообщение отредактировал Gregory - Вт, 02.06.2015, 13:14
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: