LINUX.ORG.RU

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

 


0

1

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

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

Вопросы:

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

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

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

Может таки не натягивать сову на глобус, и пилить графику вместо псевдографики.

anonymous
()

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

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

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

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

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

такое мнение видел , но что то по запросу slang только какойто странный консольный язык скриптовой нашел

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

Так то же утилита чтобы из под шел скриптов делать диалоги , не это другое ... тут задачка интерфейс навоять чтобы ЛУЧШЕ фоточек было :) пи крошечных ресурсах ...

Fastereus
() автор топика

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

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

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

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

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

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

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

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

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

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

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

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

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

Fastereus
() автор топика

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

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

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

Да вот не похоже ... даже из под другой убунты через 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

У меня ncurses под ruby работал с utf-8. Впрочем, возможно это был какой-то особый ncurses.

Leupold_cat ★★★★★
()
Ответ на: комментарий от 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

Ну я юзаю c++ и убунту , но по сути руский текст не выводит, задача то не то чтобы в локали пахало а по SSH... dkjrfkb dtxthjv проверю скорее всего заработает

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

Я к тому, что проблема не в ncurses, а ты что-то не так делаешь. Ради интереса попробовал запустить через putty - всё работает.

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

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

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

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

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

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

МС ncurses

mc работает через S-Lang.

Смотря с чем собран.

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

Это я и так умею .. только я там так и не откопал примеров

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

По подробнее

$ echo $TERM
xterm
$ mc # <- в MC кракозябры
$ dialog --msgbox Test 5 10 # <- и здесь тоже кракозябры
$ export TERM=putty
$ mc # <- теперь всё ОК
$ dialog --msgbox Test 5 10 # в диалоге тоже ОК
Deleted
()
Ответ на: комментарий от Deleted

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

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

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

Нашёл вот что 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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.