(Это изменение 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"
ЗЫ: Урря!

Модератор: 4epT
Код: Выделить всё
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) {
--------------------------------------------------