Ура, теперь в консоли можно писать по-русски! Урра!

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8207
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Ура, теперь в консоли можно писать по-русски! Урра!

Сообщение piroJOKE » Пт дек 08, 2006 6:02 pm

Некий перец Tatka замутил в свежей версии SVN поддержку русского ввода в консоли! Урря!
(Это изменение SVN5173)

Скриншот с SVN5182 - ниже!

Сцылки:
http://forums.openkore.com/viewtopic.php?t=18873 "SNV - russian encoding ?"
http://forums.openkore.com/viewtopic.php?t=24987 "How to enable russian encoding"

ЗЫ: Урря! :Yahoo!:
Вложения
rusconsole.png
русские буковки в консоли
rusconsole.png (1.73 КБ) 1448 просмотров
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download

Аватара пользователя
piroJOKE
Модератор
Сообщения: 8207
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE » Пт дек 08, 2006 6:39 pm

Вот нечто вроде патча, для ознакомления, это файл src\Interface\Console\Win32.pm

Код: Выделить всё

Win32.pm:
--------------------------------------------------
 use Win32::Console;
 use Utils::Win32;
 use encoding 'utf8';
+use Encode;
 use I18N qw(stringToBytes);
--------------------------------------------------
 #	local($|) = 1;
 	while ($self->{in_con}->GetEvents()) {
 		my @event = $self->{in_con}->Input();
-		if (defined($event[0]) && $event[0] == 1 && $event[1]) {
+
+		if (@event && $event[5] < 0) {
+			# Special characters are returned as unsigned integer
+			# (dunno why). Fix this.
+			$event[5] = 256 + $event[5];
+		}
+		if (@event && $event[0] == 1 && $event[1] == 0 && $event[3] == 18) {
+			# Alt was released and there's an ASCII code. This is
+			# a special character. Change @events as if a normal key
+			# was pressed.
+			$event[1] = 1;
+		}
+
+		if (@event && $event[0] == 1 && $event[1] == 1) {
 			##Ctrl+U (erases entire line)
 			if ($event[6] == 40 && $event[5] == 21) {
 				$self->{in_pos} = 0;
--------------------------------------------------
 #				print "\n";
 			#Other ASCII (+ ISO Latin-*)
 			} elsif ($event[5] >= 32 && $event[5] != 127 && $event[5] <= 255) {
+				my $char = Encode::decode("cp" . $self->{codepage}, chr($event[5]));
 				if ($self->{in_pos} < length($self->{input_part})) {
 					$self->{out_con}->Scroll(
 						$self->{in_pos}, $self->{in_line}, $self->{right}, $self->{in_line},
--------------------------------------------------
 					$self->{in_pos} = length($self->{input_part});
 				}
 				$self->{out_con}->Cursor($self->{in_pos}, $self->{in_line});
-				$self->{out_con}->Write(chr($event[5]));
-				substr($self->{input_part}, $self->{in_pos}, 0, chr($event[5])) if ($self->{in_pos} <= length($self->{input_part}));
+				Utils::Win32::printConsole($char);
+				substr($self->{input_part}, $self->{in_pos}, 0, $char) if ($self->{in_pos} <= length($self->{input_part}));
 				$self->{in_pos}++;
 #			} elsif ($event[3] == 33) {
 #				__PACKAGE__->writeOutput("pgup\n");
--------------------------------------------------
 				$self->{out_con}->Write(' ' x length($self->{input_part}));
 				$self->{out_con}->Cursor(0, $self->{in_line});
 				$self->{input_part} = $self->{input_list}[$self->{input_offset}];
-				$self->{out_con}->Write($self->{input_part});
+				Utils::Win32::printConsole($self->{input_part});
 				$self->{in_pos} = length($self->{input_part});
 			##Right Arrow
 			} elsif ($event[3] == 39) {
--------------------------------------------------
 				$self->{out_con}->Write(' ' x length($self->{input_part}));
 				$self->{out_con}->Cursor(0, $self->{in_line});
 				$self->{input_part} = $self->{input_list}[$self->{input_offset}];
-				$self->{out_con}->Write($self->{input_part});
+				Utils::Win32::printConsole($self->{input_part});
 				$self->{in_pos} = length($self->{input_part});
 			##Insert
 #			} elsif ($event[3] == 45) {
--------------------------------------------------
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download

Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click » Пт дек 08, 2006 6:44 pm

выложи плиз пропатченный файлик)

Аватара пользователя
piroJOKE
Модератор
Сообщения: 8207
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE » Пт дек 08, 2006 6:46 pm

Вод:
Вложения
win32rus-svn5173.zip
openkore\trunk\src\Interface\Console\Win32.pm
SVN 5173
(3.95 КБ) 183 скачивания
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download

Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click » Пт дек 08, 2006 7:03 pm

в xkore заместо русских выводит "???????"
но всеравно клёво

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Пт дек 08, 2006 7:08 pm

Click
Вот Про ХКор нуно будет прорепортировать.

Stells
Энтузиаст
Сообщения: 54
Зарегистрирован: Сб ноя 25, 2006 5:26 pm

Сообщение Stells » Пт дек 08, 2006 7:19 pm

piroJOKE писал(а):Вод:
Спасибо!)) теперь жизнь будет проще :) :Yahoo!:

Ответить