LINUX.ORG.RU

ncurses псевдографика , проблемы с выводом

 


0

1

Добрый день для начала предисловие:

Изрядно погуглив выяснил что есть «простой и легкий» способ нарисовать интерфейс похожий на MC и это библиотека ncurses. Зацепив её стал с ней пробовать, да все работает, и в друг резко выпал интересный результат на самой машине с UBUNTU SRV в локальной консоли все хорошо, так же если с другой убунты зацепиться так же все хорошо а вот если с PuTTY то все печально и плохо, в место рамок окон всякие левые символы. Нашел как исправить включить опцию перекодировки в PuTTY но тогда все остальные программы с подобным интерфейсом рассыпаются тот же МС а моя вот работает...

Вопросы:

1-МС работает всегда правильно хоть на ssh хот на PuTTY хоть локально , и выглядит одинаково , и вроде он написан с использованием ncurses, как так что нужно чтобы работало

2-Может быть есть более адекватная альтернатива ncurses ?

3-Может есть вообще более правильный подход к решению проблемы ?

3-Может есть вообще более правильный подход к решению проблемы ?

какую проблему ты решаешь, чтобы просить совета?
рисовать интерфейс как у MC — это не проблема, интерфейс MC — это уже решение проблемы пользователя, которая называется «не умение пользователя в cli по причине низкой квалификации»
какую проблему решаешь ты?

system-root ★★★ ()
Ответ на: комментарий от system-root

Ну если саму проблему то мне нужно написать, в консоли удобный конфигуратор для опроса контроллеров, настройки протоколов и прочие прочие прелести... интерфейс типа MC это выход и очень красивый и изящный и спокойно подойдет для тех кто не является гуру и поколнником cli

Fastereus ()

Нашел как исправить включить опцию перекодировки в PuTTY но тогда все остальные программы с подобным интерфейсом рассыпаются тот же МС а моя вот работает...

Приложение не знает, что за терминал используется. Как всегда в юниксах, никто ни в чем не виноват:

1. Приложение (ну или библиотека в составе приложения) читает переменную окружения TERM, чтобы понять возможности терминала.

2. Также важна локаль. Например, если локаль не юникодная, то, логично, юникодной псевдографики не будет.

3. Исходя из указаного терминала и локали, приложение посылает вывод в терминал.

4. Если вывод не соответствует тому, который может быть понят терминалом — это не проблема приложения. И не терминала.

Я хз, что там за PuTTY, но если он умеет принимать и отображать данные в utf-8, то проблем быть не должно. Нужно только выставить подходящие TERM и LANG на стороне приложения. Если не умеет, ну может проще другой эмулятор терминала найти?

devzero ()
Последнее исправление: devzero (всего исправлений: 1)
Ответ на: комментарий от devzero

Ну началось: неосиляторы-cli-кококо-низкая-квалификация-кококо...

Забей это не первая платформа и не в первый раз меня в гугл отправляют...

в принципе меня ncurses устраивает но я осознал что она не дружит с UTF ... а это серьёзно и печально ...

Просто сейчас стадия выбора компонентов , потом исправлять все будет хуже проще сейчас, отказаться от одного и перейти на другое...

Уж очень я не хочу писать свою движку для работы с терминалом в координатном режиме, точнее этот орех не для моей белочки ...

Fastereus ()

а вот если с PuTTY то все печально и плохо

С KiTTY работает исправно, если в Window/Translation поставить «Use Uniccode line drawing code pints» и «Allow ACS line drawings in UTF».

Radjah ★★★★★ ()
Ответ на: комментарий от devzero

Да вот не похоже ... даже из под другой убунты через ssh host невидно русских буквы , а вот то что вывожу просто в консоль через printf «Русский» работает и проблем нет ...

./src/functions.cpp:114:11: error: ‘WACS_ULCORNER’ was not declared in this scope
  chtype s=WACS_ULCORNER | COLOR_PAIR(1);
           ^~~~~~~~~~~~~

Нет таких определений ...

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

Накатал такой скриптик на питон

import curses
stdscr = curses.initscr()
curses.noecho()
curses.cbreak()
stdscr.clear()
stdscr.addstr(5, 0, 'тест тест')
stdscr.refresh()
stdscr.getkey()
curses.endwin()

Запустил на сервере по ssh. Всё работает. Хотя на питоне и по-удобнее штуки есть.

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

Пришлось у жены комп с виндой отобрать для чистоты эксперимента. xD

Поставил я этот putty, зашел на линукс-машину. В настойках putty выставлен юникод, но вместо линий кракозябры.

На удаленной машине TERM=xterm.

Сделал export TERM=putty, и всё заработало.

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

Очень интересно .. и так в MC кракозябров не было изначально но dialog --msgbox Test 5 10 (после естественно инсталяции) дала кракозябру которую исправил export TERM=putty и кстати русский стал так же отображаться нормально , но что интересно и кракозябры и проблемы с русским остались при работе с NCURSES ...

Может там как то ЛОКАЛЬ надо выставить пойду поковыряю заголовок может найду что то подобное ...

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

Нашёл вот что C, ncurses, кириллица ? или я чего-то не понимаю или одно из двух

Тут упоминается что для режима UTF есть ncursesw и как нистранно сама либастояла , доставил -dev перепихал линкер счас буду играться ... но что то на первый взгляд ни чего не изменилось

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

И так все таки совместно было найдено решение :

1- export TERM=putty (временно на сессию) или в настройках выставить идентификацию не xterm а PuTTY

2-подключить#include <locale.h> июзнуть setlocale(LC_CTYPE, «ru_RU.UTF8»); , так же заводилось и с setlocale(LC_ALL,"");

3-Нужно ставить ncurses версии для UTF libncursesw5 и libncursesw5-dev ну и конечно линковать ncursesw

Рецепт работает под всем что было под рукой даже на trmux в андройде

p.s. Спасибо за конструктивные ответы , если вы их давали ...

Fastereus ()