Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.168] |
|
Сообщ.
#1
,
|
|
|
Нужно было сделать небольшой интерфейс с помощью Curses::UI.
Я набросал небольшой пример на Perl5: use strict; use warnings; use utf8; use Term::ReadKey; use Curses::UI; use POSIX qw(setlocale LC_ALL); # Импортируем setlocale и LC_ALL use open qw(:std :encoding(UTF-8)); # Устанавливаем локаль для поддержки кириллицы setlocale(LC_ALL, "ru_RU.UTF-8"); binmode STDERR, ':encoding(UTF-8)'; binmode STDOUT, ':encoding(UTF-8)'; # Создаем объект интерфейса my $cui = Curses::UI->new(-color => 1); # Получаем размеры терминала my ($max_x, $max_y) = GetTerminalSize(); # Устанавливаем размеры окна # Вычисляем координаты для центрирования окна my $start_y = int(($max_y - 25) / 2); my $start_x = int(($max_x - 80) / 2); # Создаем окно my $window = $cui->add( 'main_window', 'Window', -border => 1, -title => 'Центрированное окно', -width => 80, -height => 25, -y => $start_y, -x => $start_x, ); # Создаем список элементов my @items = ("Элемент 1", "Элемент 2", "Элемент 3", "Элемент 4", "Элемент 5", "Элемент 6", "Элемент 7", "Элемент 8", "Элемент 9", "Элемент 10", "Элемент 11", "Элемент 12", "Элемент 13", "Элемент 14", "Элемент 15"); # Добавляем список в окно $window->add( 'item_list', 'Listbox', -values => \@items, -label => 'Выберите элемент:', -width => 78, # Ширина списка -height => 20, # Высота списка -onchange => sub { my $selected_item = $window->get('item_list')->get(); $cui->message('Выбранный элемент', "Вы выбрали: $selected_item"); }, ); # Запускаем интерфейс $cui->set_binding(sub { exit }, 'q'); # Выход по нажатию 'q' $cui->mainloop(); Все это делал под FreeBSD 14.1. И замечаю, что часть русского текста выводится "битой", вот скрин: Эксперименты с локалями и бубнами не помогли. Решил посмотреть как это работает на других моих системах, которые я изредка пользую. Точно такую же картину получил на предыдущей версии FreeBSD 14.0 и на Linux Debian. Один в один. Да, все эти системы предварительно полностью обновил на сегодняшнее утро. FreeBSD freebsd-14.1 14.1-RELEASE-p4 FreeBSD 14.1-RELEASE-p4 GENERIC amd64 FreeBSD freebsd-14 14.0-RELEASE-p10 FreeBSD 14.0-RELEASE-p10 #0: Wed Sep 4 08:24:14 UTC 2024 GENERIC amd64 Linux debian-pc 6.1.0-25-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.106-3 (2024-08-26) x86_64 GNU/Linux А вот ArchLinux и Linux Manjaro порадовали - там всё ровно получилось! Linux archlinux-pc 6.10.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 04 Sep 2024 15:16:37 +0000 x86_64 GNU/Linux Linux majestio-pc 6.6.47-1-MANJARO #1 SMP PREEMPT_DYNAMIC Mon Aug 19 09:51:26 UTC 2024 x86_64 GNU/Linux Вопрос: по сути очевидный - "куда копать"? Мне вообще-то нужно только под FreeBSD. Я понимаю, что можно легко отказаться от русского языка, сделать на английском. Но не хочется от проблем убегать. Есть какие мысли? |
Сообщ.
#2
,
|
|
|
Судя по тому, что проблемы только с буквами 'т' и 'р' надо смотреть в настройках системы (конфигах терминала). Это точно не кодировка текста. Кодировка обычно ломает весь набор символов, а не пару отдельных букв.
Попробуйте в окно вывести весь алфавит в верхнем и нижнем регистре. |
Сообщ.
#3
,
|
|
|
Цитата macomics @ Попробуйте в окно вывести весь алфавит в верхнем и нижнем регистре. Чисто Перлом, без ncurses, в терминале выводится всё норм: А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я Добавлено Нашел топик, у товарища под Mac OSX похожая проблема. |
Сообщ.
#4
,
|
|
|
А если через ncurses. Поняв набор символов, которые выводятся не правильно, возможно, сможем найти проблему.
Прикреплённый файлScreenshot_20240907_074955.png (70,34 Кбайт, скачиваний: 20) Даже если посмотреть на UTF-8 русский алфавит в hex - там нет и намека на символы ' @' и ' B'. Т.е. даже если символы не верно расшифрованы, тогда не должно было появится таких хвостов. Дальше я могу предположить, что проблема с сохранением текста в редакторе (см. hexdump текста исходника) |
Сообщ.
#5
,
|
|
|
Цитата macomics @ А если через ncurses. Так дело видать все в нём. Его сильно переделывали последнее время, много функций повырезали. Видать и с кодировкой намутили. А Curses:UI на нём базируется - считай обёртка. Буду ждать обновы Фряхи. Цитата macomics @ Дальше я могу предположить, что проблема с сохранением текста в редакторе (см. hexdump текста исходника) Нет, тут все ровно. Если в "сыром" перловом скрипте всё выводит ровно, значит редактор не виноват. |