Как включить расширенный режим мыши? - PullRequest
2 голосов
/ 13 января 2011
#!/usr/bin/env perl
use warnings;
use 5.012; 
use Term::ReadKey;

sub getch {
    my $c = ReadKey 0;
    if ( $c eq "\e" ) {
        my $c = ReadKey 0.10;
        if ( $c eq '[' ) {
            my $c = ReadKey 0;
            if ( $c eq 'M' ) {   
                my $event_type = ord( ReadKey 0 ) - 32;
                my $x = ord( ReadKey 0 ) - 32;
                my $y = ord( ReadKey 0 ) - 32;
                return $x, $y;
} } } }

binmode STDIN, ':encoding(utf-8)' or die $!;
ReadMode 'ultra-raw';

# enter_mouse_mode
binmode STDIN, ':raw' or die $!;
print "\e[?1003h"; # sets   SET_ANY_EVENT_MOUSE  mode

my( $x, $y  ) = getch();

# leave_mouse_mode
binmode STDIN, ':encoding(utf-8)' or die $!;
print "\e[?1003l"; # cancels SET_ANY_EVENT_MOUSE mode

ReadMode 'restore';
say "x = $x";
say "y = $y";

Этот скрипт работает только до 223 столбцов (223 + 32 -> 1 байт).
Кто-нибудь знает, как включить расширенный режим мыши ?Я пытался изменить режим мыши таким образом, но он не работал:

# enter_mouse_mode
binmode STDIN, ':utf8' or die $!;
print "\e[?1003h";
print "\e[?1005h"; ###

my( $x, $y  ) = getch();

# leave_mouse_mode
binmode STDIN, ':encoding(utf-8)' or die $!;
print "\e[?1003l";
print "\e[?1005l"; ###

Ответы [ 2 ]

2 голосов
/ 22 апреля 2012

Я рекомендую не использовать расширенный режим мыши, 1005. Невозможно отличить обычную кодировку (X10), и все еще возникает проблема, заключающаяся в том, что вы не можете определить, какая кнопка задействована в событии выпуска.

Вместо этого я бы предложил, если ваш терминал поддерживает это, используя кодировку SGR, режим 1006.

См. Также мою недавнюю запись в блоге о входах и выходах кодировок мыши терминала:

http://leonerds -code.blogspot.co.uk / 2012/04 / wide-mouse-support-in-libvterm.html

Преимущество использования кодирования SGR заключается в том, что вы можете попытаться включитьэто, но вам не нужно знать, если это было успешно;возвращенные байты из терминала сообщают вам это.Принимая во внимание, что вы никогда не узнаете, был ли расширенный режим (UTF-8) успешно включен, но вы должны знать это, чтобы правильно интерпретировать возвращаемые байты.

2 голосов
/ 03 апреля 2011

Какую версию xterm вы используете?Согласно changelog , недавно был добавлен расширенный режим мыши (версия 262).Ваш код работал для меня с xterm 266, Perl 5.10.Я не смог сломать его с помощью нескольких простых стратегий (LANG=C xterm, xterm +lc, чтобы отключить поддержку локали).

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